How to send mail in Laravel with template

Whenever we start building any application. The mailing system does matter a lot because this is what keeps engaging users with the application. So, this is a very important part also. Let’s learn together how to send mail in laravel and with templates also.

Setup A Form

First of all you have to install Laravel ( composer create-proeject laravel/laravel sendmail). After doing that you have to setup a form when we do install laravel application we always have welcome.blade.php file in our views folder. So, first of all create a form in that welcome.blade.php file.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Send Mail</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>

<body>
    <div class="container">
        <div class="row py-5 my-5 mx-5 px-5">
            <h2>Send Mail</h2>
            <form action="{{route('sendmail')}}" class="form" method="POST">
                @csrf
                <div class="row">
                    <div class="col-lg-6">
                        <input type="email" name="email" placeholder="email" class="form-control">
                    </div>
                    <div class="col-lg-6">
                        <input type="text" name="title" class="form-control" placeholder="title">
                    </div>
                    <div class="col-lg-12 pt-2">
                        <textarea name="content" placeholder="write..." class="form-control" cols="30"
                            rows="10"></textarea>
                    </div>
                    <div class="col-lg-12 pt-2">
                        <button class="btn btn-primary" type="submit">Send</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</body>

</html>

After doing this we will have a form on our first page that will be the welcome page. And my friend, when you did that then you might have an urge to save this form because without a database form is nothing. okay, But we are not going to save it into the database. Do you know why because we don’t need to save it? We will send mail directly from form to user. Let’s see how?

Setup .env File

In the .env file, we keep our configuration details. Mostly we use database configuration and mail. So, before going forward we have to do with our .env file, and let’s see the code.

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=fbbbf29se90e2d7
MAIL_PASSWORD=36f531se353bc7d
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

Rather than using my own details, I do prefer to use mailtrap.io It provides you a temporary username and password so that you can test your mail in laravel or in another application as well.

Make Mail

Before going to any other point let’s make mail first because without mail we are not going to do anything. Okay, We will use the command to create mail like this.

php artisan make:mail sendmail --markdown=emails.sendmail

When you will hit this command you will get a folder of emails into your resource > views directory. And also you will get another directory in your App directory (App/Mail) and in this, you will have a mailable file so that you can send mail easily.

<?php

namespace App\Mail;

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

class sendmail extends Mailable
{
    use Queueable, SerializesModels;
public $subject;
public $content;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($subject,$content)
    {
        $this->subject = $subject;
        $this->content = $content;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('emails.sendmail')->from('abc@gmail.com')->subject($this->subject)->with('body',$this->content);
    }
}

Make Controller

dude, you know that without a controller how we can move forward. So, let’s make the controller first.

php artisan make:controller mailsend

Now, we have a controller that can’t do anything without a route, In this controller, we will configure mail and send it to the user. Let’s see the controller code and how we will do this.

<?php

namespace App\Http\Controllers;

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

class MailController extends Controller
{
    public function send(Request $request){

        Mail::to($request->email)->send(new sendmail($request->title,$request->content));
        return back();
    }
}

Make Route

After setting up the controller and mail file. We just need the route to handle all the requests. We will not run so much of requests but we need a route because the route is main part in this process without route we can’t do anything. Let’s make a route to handle form requests.

<?php

use App\Http\Controllers\MailController;
use Illuminate\Support\Facades\Route;


Route::get('/', function () {
    return view('welcome');
});

Route::post('sendmail',[MailController::class,'send'])->name('sendmail');

Now the setup is done and to use the template we have to use the blade file and in blade we would have a markdown template.

🚀 Ready to Supercharge Your Hosting? Support Us Too! 💰

👉 Buy Hosting Now Your support means the world to us! It enables us to keep delivering quality articles, tutorials, and expert insights to help you thrive in the digital world.

Plus, you get top-tier hosting for your website! It’s a win-win. 🌟 Thank you for being a part of our community.

@component('mail::message')
# Introduction

{{$body}}

@component('mail::button', ['url' => ''])
Button Text
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

And after doing this setup you can receive mail in your mail trap account.

Conclusion

I hope you will learn from this tutorial. But I learned a lot of things from this. If you do like these kinds of content and content about web development you can subscribe to my youtube channel also.

Let’s learn together and learn fast

larachamp

Leave a Comment