DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’» is a community of 966,155 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Katheeskumar
Katheeskumar

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
Katheeskumar Author

Yeah. but available lot of Naming convention.
you said about camel-case. but I used snake_case πŸ€“πŸ€“πŸ€“πŸ€“πŸ€“

πŸ— We built a 100% open source community software called Forem.

You can contribute to the codebase or host your own.