The main goal of this package is to send emails easily. It has 4 main classes, MailBuilder, MailBuilderFactory, MailSender and MailTemplateFactory.
composer require contributte/mailingextensions:
mailing: Contributte\Mailing\DI\MailingExtensionDefault configuration looks like this:
mailing:
template:
defaults:
layout: @@default
config:
layout: @@defaultTemplating and template options are under key template. At this moment, there's a default theme (https://github.com/leemunroe/responsive-html-email-template/), simple but good looking. This default layout is located in the package, you don't need to change anything. Unless you want your own layout.
- The
defaultsshould be untouched and it can be considered as base class. Your theme will be extending the default one. - The
configcan be considered as child class, define your own theme.
Typical configuration would override the default theme with some extra features.
template:
defaults:
layout: @@default
config:
layout: @@mylayoutThere are double
@because of NEON resolving.
Example is better then 1k words.
/** @var Contributte\Mailing\IMailBuilderFactory @inject */
public $mailBuilderFactory;Thanks to the MailBuilderFactory, we create the MailBuilder to set up and send the email.
// Builder
$mail = $this->mailBuilderFactory->create();
$mail->setSubject('It is awesome');
$mail->addTo($user->email);
$mail->addBcc($user->email);
$mail->addCcs($user->email);
// Template
$mail->setTemplateFile(__DIR__ . '/../../resources/awesome.latte');
$mail->setParameters([
'username' => $user->logname,
]);
// Sending
$mail->send();At first glance, it looks like the MailBuilder breaks the SRP, but that's not the case. The MailBuilderFactory creates the MailBuilder
and provides the IMailSender and IMailTemplateFactory. The MailBuilder is just a tiny wrapper/builder with an enjoyable API.
Each template has many internal variables:
$_defaults- refer default configuration$_config- refer custom configuration$_mail- refer mail configuration (can overrides subject, from, bcc, etc..)
{layout $_config->layout}
{block #header}
Awesome emails.
{/block}
{block #content}
Hello!
{/block}Each template has many blocks, take a look at the source.