When I was launching my new website, I was looking for an email provider. That's when I came across OhMySMTP, a simple and privacy-friendly transactional email service. My web framework of choice, Laravel, unfortunately doesn't support OhMySMTP by default. Luckily, OhMySMTP does provide a swiftmailer transport plugin! This can be installed in any Laravel project, and can be configured like official transports.
Example setup
First, open up or create your project:
$ laravel new ohmysmtp_demo
And install the swiftmailer transport:
$ composer require ohmysmtp/ohmysmtp-swiftmailer
Configure Laravel
Create OhmysmtpServiceProvider.php
under app/Providers
:
<?php
namespace App\Providers;
use Illuminate\Mail\MailManager;
use Illuminate\Mail\MailServiceProvider;
use Ohmysmtp\OhmysmtpSwiftmailer\OhmysmtpSwiftmailerTransport;
class OhmysmtpServiceProvider extends MailServiceProvider
{
protected function registerIlluminateMailer()
{
$this->app->singleton('mail.manager', function ($app) {
$manager = new MailManager($app);
$this->registerOhMySmtpTransport($manager);
return $manager;
});
}
protected function registerOhMySmtpTransport(MailManager $manager) {
$manager->extend('ohmysmtp', function ($config) {
if (! isset($config['token'])) {
$config = $this->app['config']->get('services.ohmysmtp', []);
}
return new OhmysmtpSwiftmailerTransport($config['token']);
});
}
}
Remove Laravel's own MailServiceProvider
from config/app.php
, and add our own:
'providers' => [
//Illuminate\Mail\MailServiceProvider::class,
App\Providers\OhmysmtpServiceProvider::class,
],
Now add our custom transport to the mailers
array in config/mail.php
:
'ohmysmtp' => [
'transport' => 'ohmysmtp',
],
And add our OhMySMTP API token field to config/services.php
:
'ohmysmtp' => [
'token' => env('OHMYSMTP_API_TOKEN'),
],
Environment variables
To enable the OhMySMTP transport, configure the following variables in your .env
file:
MAIL_MAILER=ohmysmtp
OHMYSMTP_API_TOKEN=<Add your token from the OhMySMTP dashboard>
And that's it! 🎉 Laravel will pick up the mailer variable automatically, and route all emails through the custom transport.
Top comments (0)