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
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']); } }
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)); } }
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!