semhoun/slim-mailer

Email support for the Slim 4 Framework using Twig and Swift Mailer.

1.0.0 2019-10-03 13:25 UTC

This package is auto-updated.

Last update: 2024-10-29 05:47:06 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License Monthly Downloads

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;
});

Methods

Useful Links