semhoun / slim-mailer
Email support for the Slim 4 Framework using Twig and Swift Mailer.
Installs: 2 591
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 1
Open Issues: 0
Requires
- php: >=7.1
- slim/twig-view: 3.x@dev
- swiftmailer/swiftmailer: ^6.2
Requires (Dev)
- php-di/php-di: ^6.0
- psr/http-factory: ^1.0
- slim/slim: ^4.1
This package is auto-updated.
Last update: 2024-10-29 05:47:06 UTC
README
Email support for the Slim 4 Framework using Twig and Swift Mailer.
Mailable classes will massively tidy up your controller methods or routes, and will make sending email a breeze.
License
Licensed under MIT. Totally free for private or commercial projects.
Derivated from https://github.com/andrewdyer/slim3-mailer
Installation
composer require semhoun/slim-mailer
Usage
Attach a new instance of Semhoun\Mailer\Mailer
to your applications container so
it can be accessed anywhere you need. Mailer
takes two arguments; an instance of
Slim\Views\Twig
and an optional array of SMTP settings.
$containerBuilder = new ContainerBuilder(); $containerBuilder->addDefinitions([ 'mailer' => function (ContainerInterface $container) { $settings = $container->get('settings'); $view = $container->get('view'); $mailer = new \Semhoun\Mailer\Mailer($view, [ 'host' => '', // SMTP Host 'port' => '', // SMTP Port 'username' => '', // SMTP Username 'password' => '', // SMTP Password 'protocol' => '' // SSL or TLS ]); // Set the details of the default sender $mailer->setDefaultFrom('no-reply@mail.com', 'Webmaster'); return $mailer; } }; $app->run();
Supported Options
Sending the Email (Basic Example)
$app->get('/email', function (Request $request, Response $response, $args) use($app) { $user = new stdClass; $user->name = 'Paul Muaddib'; $user->email = 'paul.muaddib@mail.com'; $container = $app->getContainer(); $container->get('mailer')->sendMessage('emails/welcome.html.twig', ['user' => $user], function($message) use($user) { $message->setTo($user->email, $user->name); $message->setSubject('Welcome to the Team!'); }); $response->getBody()->write('Mail sent!'); return $response; });
welcome.html.twig
<h1>Hello {{ user.name }}</h1> <p>Welcome to the Team!</p> <p>Love, Admin</p>
Sending with a Mailable
Using mailable classes are a lot more elegant than the basic usage example above. Building up the mail in a mailable class cleans up controllers and routes, making things look a more tidy and less cluttered as well as making things so much more manageable.
Mailable classes are required to extend the base Semhoun\Mailer\Mailable` class;
use Semhoun\Mailer\Mailable; class WelcomeMailable extends Mailable { protected $user; public function __construct($user) { $this->user = $user; } public function build() { $this->setSubject('Welcome to the Team!'); $this->setView('emails/welcome.html.twig', [ 'user' => $this->user ]); return $this; } }
Now in your controller or route, you set the recipients address and name, passing
just a single argument into the sendMessage
method - a new instance of the mailable
class;
$app->get('/email', function (Request $request, Response $response, $args) use($app) { $user = new stdClass; $user->name = 'Paul Muaddib'; $user->email = 'paul.muaddib@mail.com'; $container = $app->getContainer(); $container->get('mailer')->->setTo($user->email, $user->name)->sendMessage(new WelcomeMailable($user)); $response->getBody()->write('Mail sent!'); return $response; });