DEV Community

кαтнєєѕкυмαɾ
кαтнєєѕкυмαɾ

Posted on

How to send Laravel mail using smtp

Create Laravel project or if you are beginner in laravel to visit Laravel Docs

💥 Setup following variables in your .env file

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=sample@example.com
MAIL_PASSWORD=************
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=sample@yourdomain.com
MAIL_FROM_NAME="${APP_NAME}"
Enter fullscreen mode Exit fullscreen mode

Don't use google gmail smtp details. because that is not a proper method to send emails and it is not working properly.

💥 Next you go to your project folder and open terminal run following command to create mail class

php artisan make:mail Mailer
Enter fullscreen mode Exit fullscreen mode

💥 Now go to app/mail folder and setup your mail class like this one

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class NewMail extends Mailable
{
    use Queueable, SerializesModels;

    public $details;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->subject($this->details['subject'])
                    ->view('email.contact')
                    ->from($this->details['from'], $this->details['from']);
    }
}
Enter fullscreen mode Exit fullscreen mode

💥 After configure mailing class create a view file with .blade.php extension

<h3 class="aligncenter" style="font-family: 'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif; box-sizing: border-box; font-size: 20px; color: #000; line-height: 1.2em; font-weight: 400; text-align: center; margin: 40px 0 0;" align="center">{{ $details['title'] }}</h3>
Enter fullscreen mode Exit fullscreen mode

Don't Forgot Mailing blade files only accept inline css's

💥 Finally set your controller on sending trigger process

public function new_mail(Request $request)
    {

        $details = [
            'to' => $request->to,
            'from' => $request->from,
            'subject' => $request->subject,
            'title' => $request->title,
            "body"  => $request->body
        ];

        \Mail::to($request->to)->send(new \App\Mail\NewMail($details));

        if (Mail::failures()) {
            return response()->json([
                'status'  => false,
                'data'    => $details,
                'message' => 'Nnot sending mail.. retry again...'
            ]);
        }
        return response()->json([
            'status'  => true,
            'data'    => $details,
            'message' => 'Your details mailed successfully'
        ]);
    }
Enter fullscreen mode Exit fullscreen mode

If you want project source please visit my github profile and clone and refer it.

😍 Have a good day.

Top comments (2)

Collapse
 
peter279k profile image
peter279k

The controller trigger function is about public function new_mail(Request $request) that seems to have the wrong coding style about the function name.

I think it should be the newMail.

Collapse
 
katheesh profile image
кαтнєєѕкυмαɾ

Yeah. but available lot of Naming convention.
you said about camel-case. but I used snake_case 🤓🤓🤓🤓🤓