Laravel has so many builtin features like authentication, facades, routes. That is the reason why Laravel has become so pupular in web development. One of the main feature Laravel provides is that simple and clean mail functionality. Laravel uses popular SwiftMailer library to send mail.
In this tutorial, we will setup new create new Laravel 6 Project and will send email from localhost.
First, we will create new Laravel 6 project. To do so, open Terminal and run the following command. It will create sendmail project.
composer create-project laravel/laravel sendmail --prefer-dist
Now go to your project directory and open .env file and set bellow configurations. We are using Google to send mail.
In Google account, check that 2-Step Verification is set to off. To do, Go to My account > Security
and turn off 2-Step Verification.
You also need to enable Less secure app access
in the Security tab.
If you don't want to disable 2-Step Verification, then you can generate App passwords and use this password in .env
configuration.
It will make possible to send mail from your application without authentication. Now put mail configurations in your .env
file
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_FROM_NAME='Username'
[email protected]
MAIL_PASSWORD=*************
MAIL_ENCRYPTION=tls
Now we will create route which will trigger mail to send controller.
In this routes/web.php
file, we have create bellow route.
<?php
use App\Https\Controllers\HomeController;
Route::get('send-mail', [HomeController::class, 'sendMail']);
So when we will hit 'send-mail' URL in browser, it will hit sendMail()
method in HomeController
.
So let's create HomeController by using this artisan command.
php artisan make:controller HomeController
Now open this controller at App/Http/Controllers/HomeController.php
and add new classmethod sendMail()
in the controller.
<?php
namespace App\Http\Controllers;
use Mail;
use App\Mail\SendMail;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Send email.
*
* @return void
*/
public function sendMail()
{
$details['to'] = '[email protected]';
$details['name'] = 'Receiver Name';
$details['subject'] = 'Hello HacktheStuff';
$details['message'] = 'Here goes all message body.';
Mail::to($details['to'])
->send(new SendMail($details));
}
}
In the Mail, we will pass to()
method with receiver email address and send()
method will send email with object of Mailable
class. You can also chain cc()
and bcc()
method before send method to send mail more than one User.
Mail::to($details['to'])
->cc($new_user_email)
->bcc($also_new_user_email)
->send(new SendMail($details));
Now go to Terminal and create Mail facade with following command:
php artisan make:mail SendMail
It will create new PHP file at Mail/SendMail.php
with same class name. Open file and change build()
function which will return view file. subject()
method will display subject in the send mail. In the with method, we are passing $details
variable, which is available in view file.
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendMail 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->view('email.send_mail')
->subject($this->details['subject'])
->with('details', $this->details);
}
}
Now go through directory resources/views
and create new blade file email/send_mail.blade.php
. This file will be sent to Mail. Open this file and create html view as you want to send. We will here put simple HTML view:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Welcome Email</title>
<link rel="stylesheet" href="">
</head>
<body>
<h2 style="text-align: center;">HacktheStuff</h2>
<p>Hello!{!! $details['name'] !!}</p>
<br>
<p>{!! $details['message'] !!}</p>
</body>
</html>
Now you have completed code so only need is to start server. Go to the Terminal window and start server.
php artisan serve
In your browser run the bellow url:
If you didn't get any errors then you get response that "Email sent successfully".
In this way, you can easily send email dynamically from your Laravel website. In the next article we will discuss about how to send email with Laravel Queue and Job, which helps to send mail in bulk.
If you need help or have suggestion, do leave a comment below.
Hi, My name is Harsukh Makwana. i have been work with many programming language like php, python, javascript, node, react, anguler, etc.. since last 5 year. if you have any issue or want me hire then contact me on [email protected]
How to import an SQL file in MySQL
While working on web application, often...How to reverse the order of an array in PHP
Use the PHP array_reverse() fu...How to create custom checkboxes in HTML using CSS and jQuery
Use the CSS :checked Pseudo-class with j...Twitter API OAuth 2.0 Authorization Example
Twitter is one of the most powerful soci...Laravel Livewire Pagination Example
This post is facile to how to utilize la...