3dots / mail
Nette Mail: Sending E-mails
Requires
- php: >=5.3.1
- ext-iconv: *
- nette/utils: ~2.2
Requires (Dev)
- nette/di: ~2.3
- nette/tester: ~1.3
Suggests
- ext-fileinfo: to detect type of attached files
Conflicts
- nette/nette: <2.2
README
Almost every web application needs to send e-mails, whether newsletters or order confirmations. That's why Nette Framework provides necessary tools.
Example of creating an e-mail using Nette\Mail\Message
class:
use Nette\Mail\Message; $mail = new Message; $mail->setFrom('John <john@example.com>') ->addTo('peter@example.com') ->addTo('jack@example.com') ->setSubject('Order Confirmation') ->setBody("Hello, Your order has been accepted.");
All parameters must be encoded in UTF-8.
And sending:
use Nette\Mail\SendmailMailer; $mailer = new SendmailMailer; $mailer->send($mail);
In addition to specifying recipient with addTo()
, it's possible to specify recipient of copy with addCc()
and recipient of blind copy: addBcc()
.
In all these methods, including setFrom()
, we can specifiy addressee in three ways:
$mail->setFrom('john.doe@example.com'); $mail->setFrom('john.doe@example.com', 'John Doe'); $mail->setFrom('John Doe <john.doe@example.com>');
HTML content can be defined using setHtmlBody()
method:
$mail->setHTMLBody('<b>Sample HTML</b> <img src="background.gif">');
Embedded images can be inserted using $mail->addEmbeddedFile('background.gif')
, but it is not necessary.
Why? Because Nette Framework finds and inserts all files referenced in the HTML code automatically.
This behavior can be supressed by adding FALSE
as a second parameter of the setHtmlBody()
method.
If a HTML e-mail has no plain-text alternative, it will be automatically generated. And if it has no subject set, it will be taken from the <title>
element.
Of course, it's possible to add attachments to the e-mail:
$mail->addAttachment('example.zip');
Can e-mail sending be even easier?
Custom mailer
Default mailer uses PHP function mail
. If you need to send mail through a SMTP server, you can use SmtpMailer
.
$mailer = new Nette\Mail\SmtpMailer(array( 'host' => 'smtp.gmail.com', 'username' => 'john@gmail.com', 'password' => '*****', 'secure' => 'ssl', )); $mailer->send($mail);
You can also create your own mailer - it's a class implementing Nette\Mail\IMailer interface.