pop-mail
The popphp/pop-mail component provides an API to manage sending mail from your application. Support is built-in for multi-mimetype emails and attachments, as well as multiple recipients and queuing. It has a full feature set that supports:
Send to email via sendmail, SMTP or any custom-written mail transport adapters
Send emails to a queue of recipients, with individual message customization
Save emails to be sent later
Retrieve and manage emails from email mailboxes.
Installation
Install it directly into your project:
composer require popphp/pop-mail
Or, include it in your composer.json file:
{
"require": {
"popphp/pop-mail": "^3.6.1"
}
}
A Note about SMTP
The SMTP transport component within pop-mail is forked from and built on top of the SMTP features and functionality of the Swift Mailer Library and the great work the Swift Mailer team has accomplished over the past years.
Basic Use
Here’s an example sending a basic email using sendmail
:
use Pop\Mail;
$transport = new Mail\Transport\Sendmail();
$mailer = new Mail\Mailer($transport);
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->attachFile(__DIR__ . '/image.jpg');
$message->setBody('Hello World! This is a test!');
$mailer->send($message);
Here’s an example sending a basic email using SMTP (MS Exchange):
use Pop\Mail;
$transport = new Mail\Transport\Smtp('mail.msdomain.com', 587);
$transport->setUsername('me')
->setPassword('password');
$mailer = new Mail\Mailer($transport);
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->attachFile(__DIR__ . '/image.jpg');
$message->setBody('Hello World! This is a test!');
$mailer->send($message);
Here’s an example sending a basic email using SMTP (Gmail Exchange):
use Pop\Mail;
$transport = new Mail\Transport\Smtp('smtp.gmail.com', 587, 'tls');
$transport->setUsername('me@mydomain.com')
->setPassword('password');
$mailer = new Mail\Mailer($transport);
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->attachFile(__DIR__ . '/image.jpg');
$message->setBody('Hello World! This is a test!');
$mailer->send($message);
Attaching a File
use Pop\Mail;
$mailer = new Mail\Mailer(new Mail\Transport\Sendmail());
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->attachFile('my-file.txt');
$message->setBody('Hello World! This is a test!');
$mailer->send($message);
Attaching a File from Data
use Pop\Mail;
$mailer = new Mail\Mailer(new Mail\Transport\Sendmail());
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$fileData = file_get_contents('my-file.txt');
$message->attachFileFromStream($fileData, 'my-file.txt');
$message->setBody('Hello World! This is a test!');
$mailer->send($message);
Sending an HTML/Text Email
use Pop\Mail;
$mailer = new Mail\Mailer(new Mail\Transport\Sendmail());
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->addText('Hello World! This is a test!');
$message->addHtml('<html><body><h1>Hello World!</h1><p>This is a test!</p></body></html>');
$mailer->send($message);
Sending Emails to a Queue
use Pop\Mail;
$queue = new Queue();
$queue->addRecipient([
'email' => 'me@domain.com',
'name' => 'My Name',
'company' => 'My Company',
'url' => 'http://www.domain1.com/'
]);
$queue->addRecipient([
'email' => 'another@domain.com',
'name' => 'Another Name',
'company' => 'Another Company',
'url' => 'http://www.domain2.com/'
]);
$message = new Mail\Message('Hello [{name}]!');
$message->setFrom('noreply@domain.com');
$message->setBody(
<<<TEXT
How are you doing? Your [{company}] is great!
I checked it out at [{url}]
TEXT
);
$queue->addMessage($message);
$mailer = new Mail\Mailer(new Mail\Transport\Sendmail());
$mailer->sendFromQueue($queue);
Saving an Email to Send Later
use Pop\Mail;
$message = new Mail\Message('Hello World');
$message->setTo('you@domain.com');
$message->setFrom('me@domain.com');
$message->addText('Hello World! This is a test!');
$message->addHtml('<html><body><h1>Hello World!</h1><p>This is a test!</p></body></html>');
$message->save(__DIR__ . '/mailqueue/test.msg');
$mailer = new Mail\Mailer(new Mail\Transport\Sendmail());
$mailer->sendFromDir(__DIR__ . '/mailqueue');
Retrieving Emails from a Client
use Pop\Mail\Client;
$imap = new Client\Imap('imap.gmail.com', 993);
$imap->setUsername('me@domain.com')
->setPassword('password');
$imap->setFolder('INBOX');
$imap->open('/ssl');
// Sorted by date, reverse order (newest first)
$ids = $imap->getMessageIdsBy(SORTDATE, true);
$headers = $imap->getMessageHeadersById($ids[0]);
$parts = $imap->getMessageParts($ids[0]);
// Assuming the first part is an image attachement, display image
header('Content-Type: image/jpeg');
header('Content-Length: ' . strlen($parts[0]->content));
echo $parts[0]->content;