28 C
Jaipur
Wednesday, October 28, 2020

Configure Mailtrap And Multiple Email Services in Laravel Applications – LinuxAndUbuntu

Must read

Vdx – An Intuitive Commandline Wrapper To FFmpeg

FFmpeg is a cross-platform, open source audio and video converter. It supports most industry standard codecs and can convert and transcode media files from...

Valorant Tier List: Best Agents In Valorant [Update 1.10]

Valorant, like Counter-Strike: Global Offensive, is a tactical five-person shooter game that has successfully grabbed millions of players worldwide. However, the feature that sets...

How To Fix Chromium-Based Web Browsers Not Working Properly After Resume From Suspend On Linux

This article explains how to fix Chromium-based web browsers (Google Chrome, Chromium, Vivaldi, Opera, etc.) not working properly after resuming from suspend on Linux. Those...

Laravel is an easy to understand PHP based framework. It makes writing complex features extremely easy, sometimes just one function does it all. While the Laravel application is under development, one might also need to test email functionality.

Emails play an important role in any application. With emails, users can be notified of new app features, available offers, and security events. It is extremely important to test your emails before sending them to real customers. Mailtrap can be helpful for testing emails in the development or production phase.

What is Mailtrap?

Mailtrap is a service for testing emails in the development environment or sends test emails before you send them to real customers. It simulates the real SMTP server and delivers your emails from the localhost or staging website to a test email on mailtrap.

Once Mailtrap is set up, developers can build functionality to allow marketing team to send emails to a mailtrap inbox to see how emails are rendered.

How to set up Mailtrap in Laravel application?

Laravel supports many email services out of the box including SMTP, Mailgun, Postmark, Amazon SES, and Sendmail. Laravel provides mail configuration file located at config/mail.php. In mail.php we can set up a default email service and its credentials.

But before editing the mail configuration file, let’s get the mailtrap credentials by creating a mailtrap account. Visit mailtrap website and sign up for an account. Go for a free plan to test their services. The free plan allows us to send 500 emails per month and provides one inbox. It’s enough for small applications.

Once you have signed up, open the Demo inbox and there will SMTP credentials for your account.

In the SMTP Settings tab, select Laravel from the dropdown menu. It will show you configuration to use in the Laravel application.

Mailtrap configuraiton credentials
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=mailtrap_username
MAIL_PASSWORD=mailtrap_password
MAIL_ENCRYPTION=tls

The easiest way to set up mailtrap is to copy the above configuration to the application’s .env file. That’s it. Now whenever you send emails, your application will deliver emails to mailtrap inbox. This is basic and useful if you are not planning to use mailtrap in production.

After you deploy the Laravel app in production, you can replace mailtrap with mailgrid, ses, or mailgun, etc.

As I said above, if you are sending emails to your customers, it is better to test how the emails are rendered. Laravel lets you easily switch between mailing services no matter the application is in development or production environment.

Use multiple email services in Laravel app

First of all, we can set a default email service in config/mail.php. Let’s say my application is in production, and I have set up mailgun as my default mailing service. Now, I need to switch to mailtrap to send test emails without changing the configuration file manually.

Use Swift_Mailer to switch mail services

We can accomplish this by creating an instance of Swift_Mailer. It will allow us to switch to a different service while a PHP script is executing. Here is how it works –

Let’s say the user clicks ‘Send test email’. This will run the following code to backup the current configuration, set new mailtrap configuration, send emails, and switch back to the default configuration after the email is sent.

First of all, import all necessary classes –

use Mail;
use Swift_SmtpTransport;
use Swift_Mailer;

Backup current configuraiton –

$backup = Mail::getSwiftMailer();

Set mailtrap configuration –

$transport = new Swift_SmtpTransport('smtp.mailtrap.io', 2525, 'tls');
$transport->setUsername('mailtrap_username');
$transport->setPassword('mailtrap_password');

$mailtrap = new Swift_Mailer($transport);

Note

In the above setUsername and setPassword function, replace mailtrap_username and mailtrap_password with your mailtrap username and password.

Set mailtrap mailer –

Mail::setSwiftMailer($mailtrap);

Send email with mailtrap –

Mail::send();

Reset back to main configuration –

Mail::setSwiftMailer($backup);

With this method, you can allow the marketing team to test their emails before sending them to real customers. We can pass a request parameter to detect if the team member wants to send live emails or test emails and change the mailer accordingly.

Basic example of using multiple mail services

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use Mail;
use Swift_SmtpTransport;
use Swift_Mailer;

class UsersController extends Controller
{
    public function test(Request $request) {
        if ($request->has('testing')) {

            // backup mailing configuration
            $backup = Mail::getSwiftMailer();

            // set mailing configuration
            $transport = new Swift_SmtpTransport('smtp.mailtrap.io', 2525, 'tls');
            $transport->setUsername('mailtrap_username');
            $transport->setPassword('mailtrap_password');

            $mailtrap = new Swift_Mailer($transport);

            // set mailtrap mailer
            Mail::setSwiftMailer($mailtrap);

            $beautymail = app()->make(SnowfireBeautymailBeautymail::class);
            $beautymail->send('emails.test', [], function($message)
            {
                $message
                    ->from('[email protected]')
                    ->to('[email protected]', 'Chill Pill')
                    ->subject('Email subject');
            });

            // reset to default configuration
            Mail::setSwiftMailer($backup);

            return "Email was sent!";
        }

        // send email using beautymail
        $beautymail = app()->make(SnowfireBeautymailBeautymail::class);
        $beautymail->send('emails.live', [], function($message)
        {
            $message
                ->from('[email protected]')
                ->to('[email protected]', 'Chill Pill')
                ->subject('Email subject');
        });

        return "Live email was sent.";
    }
}

Source link

- Advertisement -

More articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest article

Vdx – An Intuitive Commandline Wrapper To FFmpeg

FFmpeg is a cross-platform, open source audio and video converter. It supports most industry standard codecs and can convert and transcode media files from...

Valorant Tier List: Best Agents In Valorant [Update 1.10]

Valorant, like Counter-Strike: Global Offensive, is a tactical five-person shooter game that has successfully grabbed millions of players worldwide. However, the feature that sets...

How To Fix Chromium-Based Web Browsers Not Working Properly After Resume From Suspend On Linux

This article explains how to fix Chromium-based web browsers (Google Chrome, Chromium, Vivaldi, Opera, etc.) not working properly after resuming from suspend on Linux. Those...

Pixel 5 Users Report Issues When Phone is Docked on Pixel Stand

A number of Pixel 5 users are reporting a bizarre issue that apparently affects the device when left overnight on the Pixel Stand. According...