• Home
  • blog
  • Mail Logging in Laravel 5.3: Extending the Mail Driver

Mail Logging in Laravel 5.3: Extending the Mail Driver

Laravel Logo

One of the many goodies Laravel offers is mailing. You can easily configure and send emails through multiple popular services, and it even includes a logging helper for development.

Mail::send('emails.welcome', ['user' => $user], function ($m) use ($user) {
    $m->to($user->email, $user->name)->subject('Welcome to the website');

This will send an email to a new registered user on the website using the emails.welcome view. It got even simpler with Laravel 5.3 using mailables (but the old syntax is still valid). Here’s an example:

# Generate a new mailable class
php artisan make:mail WelcomeMail
// app/Mail/WelcomeMail.php

class WelcomeUser extends Mailable

    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
        $this->user = $user;

    public function build()
        return $this->view('emails.welcome');
// routes/web.php

Route::get('/', function () {
    $user = User::find(2);

    Mail::to($user->email)->send(new WelcomeUser($user));

    return "done";

Laravel also provides a good starting point for sending mails during the development phase using the log driver, and in production using smtp, sparkpost, mailgun, etc. This seems fine in most cases, but it can’t cover all the available services! In this tutorial, we’re going to learn how to extend the existing mail driver system to add our own.

To keep our example simple and straightforward, we’re going to log our emails to a DB table.

Continue reading %Mail Logging in Laravel 5.3: Extending the Mail Driver%