How to send mail in laravel 5.6

In Laravel 5.6, you can send mail using the Mail facade. Here's a step-by-step guide:

Step 1: Create a Mail Class

Create a new PHP file in the app/Mail directory, e.g., WelcomeEmail.php. This file will contain the logic for sending the email.

// app/Mail/WelcomeEmail.php

namespace App\Mail;

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

class WelcomeEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function build()
    {
        return $this->markdown('emails.welcome');
    }
}

Step 2: Create a Blade Template

Create a new Blade template in the resources/views/emails directory, e.g., welcome.blade.php. This template will contain the email content.

<!-- resources/views/emails/welcome.blade.php -->

<h1>Welcome {{ $user->name }}!</h1>

<p>Thank you for signing up!</p>

Step 3: Send the Mail

In your controller or service, use the Mail facade to send the email:

// app/Http/Controllers/AuthController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;

class AuthController extends Controller
{
    public function register(Request $request)
    {
        //... register user logic...

        $user = User::create($request->all());

        Mail::to($user->email)->send(new WelcomeEmail($user));

        return redirect()->route('home');
    }
}

Step 4: Configure Mail Settings

In your config/mail.php file, configure the mail settings:

// config/mail.php

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => [
    'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
    'name' => env('MAIL_FROM_NAME', 'Your Name'),
],
'to' => [
    'address' => env('MAIL_TO_ADDRESS', '[email protected]'),
    'name' => env('MAIL_TO_NAME', 'Recipient Name'),
],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),

Step 5: Set Environment Variables

Set the environment variables in your .env file:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_FROM_NAME=Your Name
[email protected]
MAIL_TO_NAME=Recipient Name
MAIL_ENCRYPTION=tls
[email protected]
MAIL_PASSWORD=your-password

That's it! With these steps, you should be able to send mail using Laravel 5.6.