Sending emails using SendGrid in Laravel
Hello folks, here we ‘ll know how to send emails using sendgrid in laravel. We have many ways to send emails in laravel, we can send emails using plain php or we can use email service providers like SendGrid, mailgun, mandrill and many more. As one of the follower of this site justlaravel.com has request me to post a tutorial on ‘sending emails using sendgrid’ am posting this here.
Follow these few simple steps,
Step 1 — Register SendGrid Account
- Go to https://sendgrid.com
- Click Try for Free button
- Fill all the necessary details
- Wait for a email from SendGrid conforming that your account is provisioned.
Cool,you are ready to go.
Step 2 — Change mail configurations in .env and mail.php files
Open .env located at root of the application, edit the file as below
MAIL_DRIVER=smtp
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=sendgridUsername
MAIL_PASSWORD=sendgridPassword
Now open mail.php located in /config/mail.php, (for further reference on folder/application structure look at previous post on Laravel application structure)
edit the file as below,
<?php
return [
'driver' => 'smtp',
'host' => 'smtp.sendgrid.net',
'port' => 587,
'encryption' => 'tls',
'username' => 'sendgridUsername',
'password' => 'sendgridPassword',
'sendmail' => '/usr/sbin/sendmail -bs'
];
if your website has ssl certificate, change the line ‘encryption’ => ‘tls’ to’encryption’ => ‘ssl’ and ‘port’ => 465,
Step 3 — Send emails the way you want
We ‘ll create some textarea, and the text entered will be sent as a mail when an valid email is entered,
check the form below,
<form class="w3-container" action="sendemail" method="POST"
role="email">
{{ csrf_field() }}
<p>
<label>Enter Some Text</label>
<textarea class="w3-input" type="text" name="message"></textarea>
</p>
<p>
<label>Email</label> <input class="w3-input" type="email"> <input
type="submit" name="toEmail" class="w3-btn w3-orange" value="Send">
</p>
</form>
and we create another form just with email field,
<form class="w3-container" action="sendemail" method="POST"
role="email">
{{ csrf_field() }}
<p>
<label>Email</label> <input class="w3-input" name="toEmail"
type="email">
</p>
<p>
<input type="submit" class="w3-btn w3-orange" value="Send">
</p>
</form>
When the send button is clicked we route it to the following function,
Route::any ( 'sendemail', function () {
if (Request::get ( 'message' ) != null)
$data = array (
'bodyMessage' => Request::get ( 'message' )
);
else
$data [] = '';
Mail::send ( 'email', $data, function ($message) {
$message->from ( 'donotreply@demo.com', 'Just Laravel' );
$message->to ( Request::get ( 'toEmail' ) )->subject ( 'Just Laravel demo email using SendGrid' );
} );
return Redirect::back ()->withErrors ( [
'Your email has been sent successfully'
] );
} );
and the view for the emails which we are going to be send be like,
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
</head>
<body>
<h2>Demo mail from JustLaravel</h2>@if(isset($bodyMessage))
<div class="w3-container w3-orange"><p>
<b>The data you have entered is :</b><span
style="color: #e36c39; background: #EEE";> {{ $bodyMessage }}</span></p></div>
@endif
</body>
</html>