Step-by-step instructions to configure mail function with Lumen php framework (Lumen sends email by SMTP). It uses the Laravel mail library and SMPT. You can also use MailMug.net sandbox account for email testing. MailMug is providing fake SMTP testing accounts.

Step 1: Add Laravel mail library to Lumen

The email library is not included with the Lumen framework. We need to install it by the composer.

Go to the Lumen root folder and execute the following code.

composer require illuminate\mail

Step 2: Configure the mail service

Edit bootstrap/app.php file. Uncommand $app->withFacades(); and register Illuminate\Mail\MailServiceProvider::class then add $app->configure(‘mail’);

$app->withFacades();
$app->register(Illuminate\Mail\MailServiceProvider::class);

After creating the configuration file, you should register the mailer and its aliases within your bootstrap/app.php file.

$app->configure('app');
$app->configure('mail');

$app->alias('mail.manager', Illuminate\Mail\MailManager::class);
$app->alias('mail.manager', Illuminate\Contracts\Mail\Factory::class);

$app->alias('mailer', Illuminate\Mail\Mailer::class);
$app->alias('mailer', Illuminate\Contracts\Mail\Mailer::class);
$app->alias('mailer', Illuminate\Contracts\Mail\MailQueue::class);

Step 3: Add SMTP credentials to the ENV file

Create a free SMTP sandbox account from Mailmug.net. We can easily test email functions from MailMug.

MAIL_MAILER=smtp
MAIL_HOST="smtp.mailmug.net"
MAIL_PORT=2525
MAIL_USERNAME="lz5e45osxdq0uruxb"
MAIL_PASSWORD="kbs6mfhifn8di3gi"
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="your.email@mail.com"
MAIL_FROM_NAME="${APP_NAME}"

Step 4: Add config/mail.php file

Create a config folder then Copy the code from the following code and paste it to the config/mail.php file.

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Mailer
    |--------------------------------------------------------------------------
    |
    | This option controls the default mailer that is used to send any email
    | messages sent by your application. Alternative mailers may be setup
    | and used as needed; however, this mailer will be used by default.
    |
    */

    'default' => env('MAIL_MAILER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    | Here you may configure all of the mailers used by your application plus
    | their respective settings. Several examples have been configured for
    | you and you are free to add your own as your application requires.
    |
    | Laravel supports a variety of mail "transport" drivers to be used while
    | sending an e-mail. You will specify which one you are using for your
    | mailers below. You are free to add additional mailers as required.
    |
    | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
    |            "postmark", "log", "array", "failover"
    |
    */

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'url' => env('MAIL_URL'),
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'local_domain' => env('MAIL_EHLO_DOMAIN'),
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'mailgun' => [
            'transport' => 'mailgun',
            // 'client' => [
            //     'timeout' => 5,
            // ],
        ],

        'postmark' => [
            'transport' => 'postmark',
            // 'client' => [
            //     'timeout' => 5,
            // ],
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],

        'failover' => [
            'transport' => 'failover',
            'mailers' => [
                'smtp',
                'log',
            ],
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Markdown Mail Settings
    |--------------------------------------------------------------------------
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

];

Step 5: Create an Email Controller

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Mail;

class EmailController extends Controller
{
     
    public function send() {

        $data = array('name'=>'Test Name');
        Mail::send('mail', $data, function($message) {
            $message->to('your-email@gmail.com', 'Test Name')->subject('Test Mail from MailMug');
            $message->from('info@name.com','your Name');
        });
        echo "Email Sent. Check your inbox.";
        
    }
}

Step 6: Edit routes/web.php file

$router->get('/send', 'EmailController@send');

Step 7: Create resources/views/mail.blade.php file

Example

<p>Hi... How are you?</p>

Step 8: Test it

Navigate your-domain/send. Then it will send an email by MailMug.

Send Emails in Lumen

Step 9: Add production email SMTP

Configure production email credentials from cPanel, plesk, or other server admin panel. Then copy SMPT credentials and paste them to .env file.

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *