Home > Backend Development > PHP Tutorial > How to Send Emails in Laravel

How to Send Emails in Laravel

Joseph Gordon-Levitt
Release: 2025-03-07 01:15:24
Original
186 people have browsed it

How to Send Emails in Laravel

This tutorial explores Laravel's email functionality, leveraging the Symfony Mailer component. We'll cover configuration, creating mailable classes, and sending emails, culminating in a practical example.

Configuration:

Laravel simplifies email management through a wrapper around Symfony Mailer. The primary configuration file is config/mail.php. This file defines mailers (e.g., SMTP, Sendmail, Mailgun, etc.) and their settings. The default mailer is specified by the MAIL_MAILER environment variable (in .env).

For SMTP, you'll need to configure MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, and MAIL_PASSWORD in your .env file. The sendmail driver requires setting the correct sendmail path in config/mail.php. The from address is also configurable. Third-party services (Mailgun, Postmark, SES) require additional setup in config/services.php.

Creating a Mailable Class:

A mailable class handles email creation and sending. Use the artisan command:

php artisan make:mail DemoEmail
Copy after login

This generates a DemoEmail class in app/Mail/DemoEmail.php. A typical mailable class includes:

<?php

namespace App\Mail;

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

class DemoEmail extends Mailable
{
    use Queueable, SerializesModels;

    public $demo;

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

    public function build()
    {
        return $this->from('sender@example.com')
                    ->view('mails.demo')
                    ->text('mails.demo_plain')
                    ->with(['testVarOne' => '1', 'testVarTwo' => '2'])
                    ->attach(public_path('/images/demo.jpg'), ['as' => 'demo.jpg', 'mime' => 'image/jpeg']);
    }
}
Copy after login

The __construct method initializes data, while build sets email specifics (sender, view, attachments, etc.). Create corresponding view files (resources/views/mails/demo.blade.php and resources/views/mails/demo_plain.blade.php).

Sending Emails:

A controller (e.g., MailController) uses the Mail facade to send emails:

<?php

namespace App\Http\Controllers;

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

class MailController extends Controller
{
    public function send()
    {
        $demoData = new \stdClass();
        $demoData->demo_one = 'Demo Value 1';
        $demoData->demo_two = 'Demo Value 2';
        $demoData->sender = 'Sender Name';
        $demoData->receiver = 'Receiver Name';

        Mail::to("receiver@example.com")->send(new DemoEmail($demoData));
    }
}
Copy after login

The Mail::to()->send() method sends the email. Add a route in routes/web.php to access the controller.

For testing without actually sending emails, set MAIL_DRIVER to log in config/mail.php to log emails to storage/logs/laravel.log.

Conclusion:

Laravel's mail system, built on Symfony Mailer, offers a streamlined approach to email management. This tutorial demonstrated the process from configuration to sending emails, providing a solid foundation for integrating email functionality into your Laravel applications. Explore Envato Market for further Laravel resources.

The above is the detailed content of How to Send Emails in Laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template