Framework agnostic library to queue and send emails from multiple services using a consistent API.
NOTE: Development is currently underway to integrate additional mail services (adapters) to Mail Manager, and these will be released as they are developed.
This project is open source and available under the MIT License.
- PHP
^8.0
PDO
PHP extension
composer require bayfrontmedia/mail-manager
NOTE: All exceptions thrown by Mail Manager extend Bayfront\MailManager\Exceptions\MailException
, so you can choose to catch exceptions as narrowly or broadly as you like.
A Bayfront\MailManager\AdapterInterface
must be passed to both the Bayfront\MailManager\Mail
, and the Bayfront\MailManager\MailQueue
constructors.
There are a variety of adapters available, each with their own required configuration.
In addition, you may also create and use your own adapters to be used with Mail Manager.
All adapters have a getInstance()
method, which can be used to get the underlying instance used by the adapter.
PHPMailer
The PHPMailer adapter allows you to use PHPMailer for sending messages.
use Bayfront\MailManager\Adapters\PHPMailer;
$config = [
'smtp' => true,
'smtp_auth' => true,
'smtp_secure' => 'tls', // STARTTLS or SMTPS
'host' => 'mail.example.com',
'port' => 587,
'username' => 'your_name@example.com',
'password' => 'your_password',
'debug' => false
];
try {
$adapter = new PHPMailer($config);
} catch (AdapterException $e) {
die($e->getMessage());
}
The PHPMailer adapter also has a testConnection()
method you can use to test for a successful connection to the SMTP server.
You may choose one of the following classes to use:
The Bayfront\MailManager\Mail
class allows for the creation and immediate sending of messages.
No database is needed.
The Bayfront\MailManager\MailQueue
class is the same as above, only it requires a PDO
instance to work with queued messages.
Queued messages allow for messages to be sent programmatically at a later date.
Mail default configuration
use Bayfront\MailManager\Mail;
$mail = new Mail($adapter);
MailQueue default configuration
use Bayfront\MailManager\MailQueue;
use Bayfront\MailManager\Exceptions\QueueException;
$pdo = new PDO('mysql:host=example.com;dbname=database_name', 'username', 'password');
$queue_config = [
'table' => 'mail_queue', // Name of database table to use
'max_attempts' => 3 // Maximum number of failed sending attempts before deleting message
];
try {
$queue = new MailQueue($adapter, $pdo, $queue_config);
} catch (QueueException $e) {
die($e->getMessage());
}
MailQueue only
Description:
Create a new message.
Parameters:
$message
(array)
Returns:
- (self)
Throws
Bayfront\MailManager\Exceptions\MessageException
Example:
$message = [
'to' => [ // Array of recipients
[
'address' => 'to@example.com'.
'name' => 'Recipient name' // Optional
]
],
'from' => [
'address' => 'you@example.com'
'name' => 'Your name' // Optional
],
'subject' => 'Message subject',
'body' => 'Message body'
];
try {
$mail->create($message);
} catch (MessageException $e) {
die($e->getMessage());
}
Description:
Add a "To" recipient.
Parameters:
$address
(string)$name = NULL
(string|null): IfNULL
, a name will not be defined
Returns:
- (self)
Example:
$mail->addAddress('jane.doe@example.com', 'Jane Doe');
Description:
Add a "Cc" recipient.
Parameters:
$address
(string)$name = NULL
(string|null): IfNULL
, a name will not be defined
Returns:
- (self)
Example:
$mail->addCC('jane.doe@example.com', 'Jane Doe');
Description:
Add a "Bcc" recipient.
Parameters:
$address
(string)$name = NULL
(string|null): IfNULL
, a name will not be defined
Returns:
- (self)
Example:
$mail->addBCC('jane.doe@example.com', 'Jane Doe');
Description:
Add an attachment.
Parameters:
$file
(string): Path to the file$name = NULL
(string|null): New name to assign to file. IfNULL
, the existing name will be used.
Returns:
- (self)
Example:
$mail->addAttachment('/path/to/existing/image.jpg', 'new-name.jpg');
Description:
Discard message.
Parameters:
- None
Returns:
- (self)
Example:
$mail->discard();
Description:
Send message.
Parameters:
- None
Returns:
- (void)
Throws:
Bayfront\MailManager\MessageException
Example:
$mail->send();
NOTE: This method is only available with the MailQueue
class.
Description:
Queue message.
Parameters:
$date_due
(\DateTimeInterface
)$priority = 5
(int): Messages will be sent in order by due date sorted by priority in descending order
Returns:
- (void)
Throws:
Bayfront\MailManager\QueueException
Example:
$message = [
'to' => [ // Array of recipients
[
'address' => 'to@example.com'.
'name' => 'Recipient name' // Optional
]
],
'from' => [
'address' => 'you@example.com'
'name' => 'Your name' // Optional
],
'subject' => 'Message subject',
'body' => 'Message body'
];
try {
$mail->create($message);
} catch (MessageException $e) {
die($e->getMessage());
}
try {
$mail->addQueue(new \Datetime('2020-10-01 10:35:00'));
} catch (QueueException $e) {
die($e->getMessage());
}
NOTE: This method is only available with the MailQueue
class.
Description:
Remove a given ID from the queue.
Parameters:
$id
(int): Uniqueid
from the database table
Returns:
- (bool)
Throws:
Bayfront\MailManager\QueueException
Example:
$mail->removeQueue(35);
NOTE: This method is only available with the MailQueue
class.
Description:
Get all messages in queue that are due, up to a given limit.
Parameters:
$limit = 0
(int):0
to get all
Returns:
- (array)
Throws:
Bayfront\MailManager\QueueException
Example:
try {
print_r($mail->getQueue());
} catch (QueueException $e) {
die($e->getMessage());
}
NOTE: This method is only available with the MailQueue
class.
Description:
Send messages in queue that are due, up to a given limit.
Parameters:
$limit = 0
(int):0
to send all
Returns:
- (array)
Throws:
Bayfront\MailManager\QueueException
Example:
try {
$results = $mail->sendQueue(50); // Send up to 50 queued messages
} catch (QueueException $e) {
die($e->getMessage());
}
The returned array contains a result summary with the following structure:
[
'sent' => 0, // Number of messages sent
'removed' => 0, // Number of messages removed (exceeded max attempts)
'failed' => 0, // Number of messages failed
'failed_ids' => [] // Unique ID's of failed messages
];