This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

✨ Vultr and Linode are back on Cloudways! VIEW PLANS→

Send Email In Laravel Through Email Sending  Service Providers

Updated on July 6, 2023

14 Min Read
laravel email

Whether it’s sending important business updates, sharing newsletters, or connecting with friends and family, the ability to send emails seamlessly and efficiently is crucial. Laravel, a popular PHP framework, offers a robust solution for email management by integrating various email-sending service providers.

Email-sending service providers act as a helpful middleman between your Laravel app and the email servers. With this service by your side, you can focus on building your application’s core functionality while leaving the email delivery part in capable hands.

Also, they provide developers with a reliable and convenient way to incorporate email functionality into their applications. The PHP-powered websites use the Mail() php method to send emails. However, in this case, security is often compromised as it is not the most secure way to send/receive emails on the website.

To send emails in Laravel, the framework provides several advanced features to work with. It has different packages available in the market that makes the integration of emailing functionality effortless. Not only that, but these email service providers bring a host of additional benefits to the table, that we’ll find out in this blog.

Why Use Laravel to Send Emails?

Laravel offers various tools to configure email on websites. Some of these options include:

  • Drivers for SMTP, Mailgun, SparkPost, Amazon SES, and Sendmail.
  • A clean and expressive API for sending emails.
  • Removing the complexities of email protocols and configurations lets you focus on your email’s content and structure.
  • Support for multiple mail drivers out of the box, including SMTP, Sendmail, Amazon SES, and more.
  • Seamless integration with Laravel’s built-in queueing system to help you queue emails for background processing.
  • Laravel’s Mailable classes provide a structured way to define email-specific logic, making your code more organized and maintainable.
  • Testing utilities to simplify the process of writing tests for email functionality.
  • An email system that seamlessly integrates with Laravel’s event system.
  • Localization Methods to set desired languages for specific users.

Stop Wasting Time on Servers

Cloudways handles server management for you to help you focus solely on creating great apps and keeping your clients happy.

Setting up the Prerequisites

To send an email in Laravel, you need to set up a few prerequisites.

  • Install Laravel using the composer command.
composer global require laravel/installer
  • Laravel uses a configuration file called mail.php to set up email drivers and other related settings. Open the config/mail.php file in your Laravel project.
  • Set the driver option to the desired email driver you want to use (e.g., SMTP, Mailgun, Sendmail, etc.).
  • Configure the driver-specific settings according to the chosen driver. For example, if you’re using the SMTP driver, provide the SMTP host, port, username, password, etc.
  • Update the from array to specify the default “from” address for your emails.
  • Create or update your .env file in the root of your Laravel project. Set the necessary environment variables for your chosen mail driver.
  • Create or modify email views as per your requirements in resources/views/directory.
  • Generate a new Mailable class using the Artisan command:
php artisan make:mail MyEmail

That’s it! You’ve set up the prerequisites for sending an email in Laravel. You can now send emails using the configured email driver, environment variables, and email views.

What Is Mailable in Laravel?

In Laravel, a Mailable is a dedicated class that represents an email message. It encapsulates the logic and configuration required to send an email. Mailable classes make it easy to create, customize, and send emails in a structured and maintainable way.

By creating a Mailable class, you can define various aspects of an email, such as the recipient, subject, and email content. Mailables also provides a way to leverage the power of Laravel’s Blade templating engine to create dynamic email views. Here’s a general overview of how Mailables work in Laravel:

  • Creating a Mailable: You can generate a new Mailable class using the Artisan command-line tool provided by Laravel. For example, running the following command will create a new Mailable called WelcomeEmail:
php artisan make:mail WelcomeEmai
  • This command will generate a new WelcomeEmail class in the app/Mail directory.
  • Customizing the Mailable: Open the generated WelcomeEmail class and update the build method. This method is responsible for building the email message. You can set the recipient, subject, and any additional data you want to pass to the email view.
  • Creating an Email View: Laravel expects email views to be located in the resources/views directory. By default, email views are stored in the resources/views/mails directory. Create a Blade template file (e.g., welcome.blade.php) to define the email’s HTML structure and content. You can access the data passed from the Mailable class in the email view.
  • Sending the Email: To send the email, you can use the Mail facade or call the send method on the Mailable instance. For example, you can send the WelcomeEmail by using the following code:
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;

Mail::to('[email protected]')->send(new WelcomeEmail());
  • This code sends an instance of the WelcomeEmail Mailable to the specified recipient.

Mailable classes in Laravel provide a structured and reusable way to handle email messages, making it easier to maintain and manage your email functionality. They allow you to separate the email logic from your application logic, resulting in cleaner and more maintainable code.

How to Install Laravel (Easy Steps)

To send an email in Laravel through email-sending service providers, you obviously need a Laravel application installed on your server. If you have already, skip to this part; if not, then follow the steps below:

Host Your Laravel Apps On Cloudways for Faster Speeds

Start building your apps on Laravel hosting with hourly auto backups, staging URLs, SSL management & active support, etc.

To make sure that you don’t get distracted by server-level issues, install Laravel to a server using Cloudways managed platform because it takes care of server-level issues and offers a great stack of caches and database technology. You can try out Cloudways for free by signing up for an account.

  • Visit the Cloudways Platform.
  • Log in with your credentials or sign up for a new account.
  • Click Add Application to add your Laravel app.

Laravel installation

  • Select an existing server or add a new server.

Laravel installation

  • Choose Laravel as your application from the drop-down and name it.
  • Click Add Application.

Laravel installation

  • Wait for your application to be added. Once it is ready, you can start managing it.

Laravel installation

Now that you have a working Laravel app on Cloudways fast servers, let’s learn how you can configure emails on it.

How to Configure Gmail SMTP for Laravel

Setting up email in Laravel with Gmail SMTP is quite easy. Start with configuring basic settings. To carry out this step, Paste the following code in the .env file according to your settings:


In the above-mentioned settings, you can configure MAIL_DRIVER as SMTP, MAIL_HOST for Gmail as, MAIL_ PORT for Gmail as 465, and MAIL_ENCRYPTION method as SSL.

Since we are using Gmail SMTP with Laravel, we need to change some security settings on our Google account to give access to less secure applications.

Set Up Gmail Account

  • After successfully configuring the settings to your Laravel application, go to your Gmail account.

create gmail account

  • Log in to your Gmail account & click on the Google account settings.
  • Check your security settings to confirm if the less secure app access is active. We must ensure it’s on since we’ve to use SMTP.

gmail security setting

Next, follow the steps below:

In Controller

  • Create a controller with any name you like and paste the following code into it:
public function mail()
$to_name = ‘RECEIVER_NAME’;
$data = array(‘name’=>”Cloudways (sender_name)”, “body” => “A test mail”);
Mail::send(‘mail’, $data, function($message) use ($to_name, $to_email) {
$message->to($to_email, $to_name)
->subject(Laravel Test Mail’);
$message->from(‘SENDER_EMAIL_ADDRESS’,’Test Mail’);
   return 'Email sent Successfully';

View File

Hello <b>{{ $name }}</b>,

Laravel Mail

There are many guides and tutorials available online related to Laravel Mail. You can also find some detailed examples on the official Laravel website.

Building Email in Laravel

Laravel provides a simple API for the popular SwiftMailer library with drivers for SMTP, Mailgun, Postmark, Amazon SES, and Sendmail, allowing you to send emails quickly with your choice of structure.

Creating Mailable

In Laravel, each type of email sent by your application is represented as a “mailable” class. First, you need to create a mailable class with any name. Let’s paste the following command on the SSH terminal of Cloudways.

php artisan make:mail CloudHostingProduct

Once you execute the above-mentioned command, your mail class will be created with the name of CloudHostingProduct. So, it will create this file inside App\Mail\CloudHostingProduct.php.

The From Method

In the Form Method method, define the email address that you want to use.

public function build()
    return $this->from('[email protected]')

Global Mail Address

If your mail is the same across all our web applications so you can config first in the config/mail.php file in Laravel by using the code below. If you are using the same email address across the whole application, then you have to first configure it in the config/mail.php file. Just copy and paste the following code.

'from' => ['address' => '[email protected]', 'name' => 'App Name'],

Setup View for Laravel Mail

Within a mailable class’ build method, you may use the view method to specify which template should be used for mailing when rendering the email’s contents.

public function build()
    return $this->view('emails.CloudHosting.Product);

View Data

Want to pass some data to the view function that you can utilize when rendering the email’s HTML? There are two ways to make data available to your view.

First, any public property defined in your mailable class will automatically be available to view. For example, you may pass data into your mailable class’ constructor and set that data to public properties defined on the class:


namespace App\Mail;

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

class SendMailable extends Mailable
    use Queueable, SerializesModels;
    public $name;

    public function __construct($name)
        $this->name = $name;
    public function build()
        return $this->view('');

Once the data has been set to public property, it will automatically be available in your view.

Creating the Laravel Email Template

    Name: {{ $name }}

Configuring the Routes

Create a route by pasting the following code in the web.php file.

Route::get('/send/email', 'HomeController@mail');

Controller File

Now, create a controller file with any of your preferred names. For this tutorial, I will paste the following code in HomeController.

public function mail()
   $name = 'Cloudways';
   Mail::to('[email protected]')->send(new SendMailable($name));
   return 'Email sent Successfully';

5 Best Emailing Tools for Laravel (+Installation Steps)

There are a variety of email packages and sources available for Laravel. Let’s check out some of the most commonly used tools in Laravel to send emails. This section covers integration settings for 5 best emailing tools; click them to go directly to their integration steps:

Laravel Apps Perform Better on Cloudways

Get hourly auto backups, staging URLs, SSL management, active support, and more dev-friendly features on the best Laravel hosting.

Integrate Mailtrap with Laravel

Mailtrap has a default server in Laravel, so you just have to type in your credentials there. Just install Laravel using Cloudways’ Managed Laravel Hosting Platform and paste the following configurations in the .env file.

MAIL_USERNAME= //your username generated by Mailtrap
MAIL_PASSWORD= // your password generated by Mailtrap
[email protected]

laravel mailtrap setting

In most cases, the .env file configuration is enough. Alternatively, you can set your config/mail.php file to the following content (it is also available in the list of integrations in Mailtrap):

return [
  "driver" => "smtp",
  "host" => "",
  "port" => 2525,
  "from" => array(
      "address" => "[email protected]",
      "name" => "Example"
  "username" => "1a2b3c4d5e6f7g" // your username,
  "password" => "1a2b3c4d5e6f7g" // your password,
  "sendmail" => "/usr/sbin/sendmail -bs"

Create Mailable Class For Mailtrap

Now, create a Mailable class by pasting the following command on the SSH Terminal.

php artisan make:mail MailtrapExample

mailtrap mailable class

Next, you have to find it in the Mail directory in the app/Mail. You have a template that contains basic functions, so that you can modify that template with the following code:

namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class MailtrapExample extends Mailable
    use Queueable, SerializesModels;
     * Create a new message instance.
     * @return void
    public function __construct()
     * Build the message.
     * @return $this
public function build()
        return $this->from('[email protected]', 'Mailtrap')
            ->subject('Mailtrap Confirmation')
                'name' => 'New Mailtrap User',
                'link' => ''

Next, you have to create a message in the blade.php file. In this example, I have specified the mailable class in the mails.exmpl. Now you have to create a ‘mails’ directory with a blade template file ‘emailexample.blade.php’.


To create a route for mail, just paste the following code:


use App\Mail\MailtrapExample;
use Illuminate\Support\Facades\Mail;

Route::get('/send-mail', function () {

    Mail::to('[email protected]')->send(new MailtrapExample()); 

    return 'A message has been sent to Mailtrap!';


And that’s it! You’ve successfully integrated Mailtrap with Laravel.

Integrate SendGrid with Laravel

Another popular tool for Laravel’s email is SendGrid. Let’s check out the following guidelines for sending an email with SendGrid in Laravel.


Mailables are responsible for collating data and passing them to ‘views’, just like Mailtrap. You can first check your application .env file for sending email configuration related to SendGrid.

MAIL_FROM_NAME="Pardeep Kumar"
[email protected]

Create Mailable

Just like in Mailtrap, you can create a mailable class by pasting the following command on the SSH terminal.

php artisan make:mail TestEmail

This command will create a new file under app/Mail/TestEmail.php and it should look like this:

public function build()
        $address = '[email protected]';
        $subject = 'This is a demo!';
        $name = 'Jane Doe';
        return $this->view('emails.test')
                    ->from($address, $name)
                    ->cc($address, $name)
                    ->bcc($address, $name)
                    ->replyTo($address, $name)
                    ->with([ 'test_message' => $this->data['message'] ]);

Laravel Email View

Let’s create Laravel View for Email Templates when sending an email. Just paste the following code into your view file located in views/emails/test.blade.php.

<!DOCTYPE html>
    <html lang="en-US">
    		<meta charset="utf-8">
    		<h2>Test Email</h2>
    		<p>{{ $test_message }}</p>

Integrating Mailgun in Laravel

First of all, you have to sign up on Mailgun and create a free account. After creating your account, you can change your .env file settings by just changing Mail Driver to Mailgun.


After successfully logging in, you will see the codes in different languages. Select the PHP code from there.

laravel mailgun

Laravel Config File

Add Mailgun configuration to your application by pasting the following code in config/services.php.

'mailgun' => [
    'domain' => '',
    'secret' => '',

Laravel Mailgun Routes

Let’s create routes for testing emails using Mailgun. Just copy the below-given code in your application web.php file.

Route::get('send_test_email', function(){
  Mail::raw('Sending emails with Mailgun and Laravel !', function($message)
    $message->to('[email protected]');

You may also want to include a subject line and possibly a sender email like so:

Route::get('send_test_email', function(){
  Mail::raw('Sending emails with Mailgun and Laravel ', function($message)
    $message->subject('Mailgun and Laravel ');
    $message->from('', 'Website Name');
    $message->to('[email protected]');

Integrating Mandrill in Laravel

First of all, you have to create an account on Mandrill and then have to install a guzzle for that. Just paste the following command in your application.

"guzzlehttp/guzzle": "~5.3|~6.0"


Then, you have to set up the application driver in your mail.php file. You must then copy the API key in the config/services.php.

'mandrill' => [
    'secret' => 'your-mandrill-key',

Sending Mandrill Email

Copy the method mentioned below for sending an email using Mandrill.

\Mail::send('welcome', [], function ($message){
    $message->to('recipient_email_address')->subject('Cloudways - Testing mail');

Integrate Mailchimp in Laravel

To integrate Mailchimp in Laravel, you have to first create a free account on Mailchimp. After successfully logging in, create a List on the menu, then go to Settings and copy your List ID, which you will use in API. Open your .env file and paste the API key in there.




Install Laravel Mailchimp Package

After successfully configuring the settings in the .env file, open your SSH terminal and paste the following command.

composer require skovmand/mailchimp-laravel

Laravel Config File

Now, set up your configuration file by pasting the following code in your config.php file.

return [


  $provides => [





Laravel Routes

Now, set up your web application routes as shown below.

Route::get('manageMailC', 'MailChimpController@manageMailC');

Laravel Controller

Now, create a controller with the name MailchmpController.php.

use Illuminate\Http\Request;
use Auth;
use Config;

class MailChimpController extends Controller

    public $mailchimp;
    public $listId = '';

    public function __construct(\Mailchimp $mailchimp)
        $this->mailchimp = $mailchimp;

    public function manageMailC()
        return view('mailchimp');

    public function sub(Request $request)
    	$this->validate($request, [
      	'email' => 'required|email',

        try {

                ['email' => $request->input('email')]

            return redirect()->back()->with('success','Email Subscribed ‘);

        } catch (\Mailchimp_List_AlreadySubscribed $e) {
            return redirect()->back()->with('error',Already Subscribed');
        } catch (\Mailchimp_Error $e) {
            return redirect()->back()->with('error','Error MailChimp');

    public function sendComp(Request $request)
    	$this->validate($request, [
      	'subject' => 'required',
      	'to_email' => 'required',
      	'from_email' => 'required',
      	'message' => 'required',

        try {

          $options = [
          'list_id'   => $this->listId,
          'subject' => $request->input('subject'),
          'from_name' => $request->input('from_email'),
          'from_email' => '[email protected]',
          'to_name' => $request->input('to_email')

          $content = [
          'html' => $request->input('message'),
          'text' => strip_tags($request->input('message'))

          $campaign = $this->mailchimp->campaigns->create('regular', $options, $content);

        	return redirect()->back()->with('success','send camp successfully');

        } catch (Exception $e) {
        	return redirect()->back()->with('error','Error MailChimp');


Laravel View

After creating Controller, the next step is to create your view blade file in resources/views/ mailchimp.blade.php. Just paste the following code into the file. You can also check out MailChimp php integration On Cloudways, as it is indeed an all-in-one platform to get engage with your audiences and other stakeholders.


<h2 class="text-center">MailChimp API Example</h2>
<div class="container">

@if ($message = Session::get('success'))
<div class="alert alert-success alert-block">
  <button type="button" class="close" data-dismiss="alert">×</button>	
        <strong>{{ $message }}</strong>

@if ($message = Session::get('error'))
<div class="alert alert-danger alert-block">
  <button type="button" class="close" data-dismiss="alert">×</button>	
        <strong>{{ $message }}</strong>

  <div class="row">
    <div class="col-md-5">
      <div class="well">
               {!! Form::open(array('route' => 'subscribe')) !!}
                	<h3 class="text-center">Subscribe Your Email</h3>
                   <input class="form-control" name="email" id="email" type="email" placeholder="Your Email" required>
                   <div class="text-center">
                   	<button class="btn btn-info btn-lg" type="submit">Subscribe</button>
               {!! Form::close() !!}
    <div class="col-md-7">
      <div class="well well-sm">
          {!! Form::open(array('route' => 'sendComp','class'=>'form-horizontal')) !!}
            <legend class="text-center">Send Campaign</legend>

            <!-- Name input-->
            <div class="form-group">
              <label class="col-md-3 control-label" for="name">Subject</label>
              <div class="col-md-9">
                <input id="name" name="subject" type="text" placeholder="Your Subject" class="form-control">

            <div class="form-group">
              <label class="col-md-3 control-label" for="email">To</label>
              <div class="col-md-9">
                <input id="email" name="to_email" type="text" placeholder="To " class="form-control">

            <div class="form-group">
              <label class="col-md-3 control-label" for="email">From</label>
              <div class="col-md-9">
                <input id="email" name="from_email" type="text" placeholder="From " class="form-control">

            <!-- Message body -->
            <div class="form-group">
              <label class="col-md-3 control-label" for="message">Your message</label>
              <div class="col-md-9">
                <textarea class="form-control" id="message" name="message" placeholder="Please enter your message here..." rows="5"></textarea>

            <!-- Form actions -->
            <div class="form-group">
              <div class="col-md-12 text-right">
                <button type="submit" class="btn btn-primary btn-lg">Send Campaign</button>
          {!! Form::close() !!}

Troubleshooting Common Email Issues in Laravel

Issue: Emails Not Being Delivered; the potential causes could be misconfigured mail drivers, spam filters, or blacklisting.

Solution: This is the most common type of error a user has to face while sending an email; the way to fix this is; Step-by-step troubleshooting process to identify and resolve email delivery issues, including checking driver configurations, verifying DNS settings, and managing sender reputation.

Issue: Incorrect Email Configuration; is caused by incorrect SMTP credentials, missing required parameters, or incompatible drivers.

Solution: Detailed instructions on reviewing and correcting email configuration settings, including SMTP, Sendmail, and other driver-specific configurations.

Issue: Authentication and Authorization Problems

Solution: Detailed steps to verify authentication credentials, manage firewall settings, and ensure proper encryption methods to resolve authentication issues.

Issue: Email Content and Formatting Problems

Solution: Tips to validate email content, address MIME type issues, handle attachments correctly, and ensure consistent email formatting across different email clients.

Issue: Email Spam or Blacklisting; happens when email is marked as spam, domain blacklisting, or reputation issues.

Solution: Strategies to improve email deliverability, including implementing SPF, DKIM, and DMARC, monitoring blacklists, and maintaining a good sender reputation.

Issue: Slow Email Delivery; potential causes such error can be network latency, server overload, or inefficient queue management.

Solution: Techniques to optimize email delivery speed, including optimizing queue configurations, using dedicated email delivery services, and monitoring server performance.

Level Up Your Laravel Hosting with Managed Hosting From Cloudways!

Laravel Hosting Taken to the Next Level – Cloudways’ Managed Hosting Offers Unbeatable Speed and Reliability.

Final Words

Sending emails is a crucial aspect of many web applications, and Laravel simplifies this process with its robust email functionality. Laravel’s flexibility allows you to integrate with popular email services like Mailgun, SendGrid, and SES, providing even more versatility and reliability.

Using Laravel email tools, you can confidently implement email functionality in your Laravel applications, ensuring efficient communication with your users, customers, or clients. By adhering to industry standards and continuously optimizing your email infrastructure, you can deliver exceptional user experiences and foster stronger connections with your audience.
Happy emailing!

Q: Which third-party email sending providers are supported by default in Laravel?

A: Following are supported by default in Laravel:

  • Mailgun
  • Sparkpost
  • Amazon SES

Q: What are the common reasons why emails fail to deliver?

A: Reasons why emails may fail to be delivered:

  • A technical error in your programming script
  • Blocked by your hosting provider while sending
  • Reached the email sending rate limit set by your hosting provider
  • Blocked by the recipient server because of the “bad reputation” of your hosting provider server
  • Went to SPAM or another automatically filtered folder

Q: How to use mail() in Laravel?

A: Laravel provides a powerful and clean API over the SwiftMailer library with drivers for Mailgun, SMTP, Amazon SES, SparkPost, and sending email. With this API, we can send emails on a local server as well as the live server.

Laravel allows us to store email messages in our view files. For example, to manage our emails, we can create an email directory within our resources/views directory.

Q: How can we check if emails have been sent in Laravel?

A: In general, Mail::failures() returns an array of failed email addresses.

Q: How do I create an email template in Laravel?

A: An email template file is a blade file that you can customize to add details and custom sections as per your email template design.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Inshal Ali

Inshal is a Content Marketer at Cloudways. With background in computer science, skill of content and a whole lot of creativity, he helps business reach the sky and go beyond through content that speaks the language of their customers. Apart from work, you will see him mostly in some online games or on a football field.


Get Our Newsletter
Be the first to get the latest updates and tutorials.

Thankyou for Subscribing Us!


Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Start my tour


  • 0


  • 0


  • 0


  • 0



For 4 Months &
40 Free Migrations

For 4 Months &
40 Free Migrations

Upgrade Now