In Laravel, sending emails is a common task, and Laravel provides a clean and simple API for this purpose. Laravel uses the SwiftMailer library to send emails. Here's a basic guide on how to send emails in Laravel:
1. Configuration:
Make sure that your application's mail configuration is set up correctly in the config/mail.php
file. You may need to configure the MAIL_DRIVER
, MAIL_HOST
, MAIL_PORT
, MAIL_USERNAME
, and MAIL_PASSWORD
variables in your .env
file.
2. Creating Mailables:
Mailables in Laravel are classes that represent emails. You can generate a new mailable using the make:mail
Artisan command:
php artisan make:mail OrderShipped
This will create a new mailable class in the app/Mail
directory.
3. Configuring Mailables:
Edit the generated mailable class to define the email's subject, view, and any data that should be passed to the view.
// app/Mail/OrderShipped.php public function build() { return $this->view('emails.orders.shipped'); }
4. Creating Email Views:
Create a Blade view for your email. By default, email views are stored in the resources/views/emails
directory.
<!-- resources/views/emails/orders/shipped.blade.php --> <p>Your order has been shipped!</p>
5. Sending Emails:
In your controller or wherever you need to send an email, create a new instance of your mailable and call the send
method:
use App\Mail\OrderShipped; use Illuminate\Support\Facades\Mail; public function sendEmail() { $orderShipped = new OrderShipped(); Mail::to('[email protected]')->send($orderShipped); return 'Email sent successfully!'; }
6. Passing Data to Mailables:
You can pass data to your mailable for use in the email view by defining public properties or using the with
method.
// app/Mail/OrderShipped.php public $order; public function __construct(Order $order) { $this->order = $order; } public function build() { return $this->view('emails.orders.shipped'); }
7. Inline Attachments and Attachments:
You can attach files to your emails using the attach
and attachData
methods. For inline attachments, use the embed
method.
public function build() { return $this->view('emails.orders.shipped') ->attach('/path/to/file') ->embed('/path/to/image'); }
8. Markdown Mailables:
Laravel also supports Markdown for emails. You can generate a Markdown mailable using the make:mail
Artisan command with the --markdown
option.
php artisan make:mail OrderShipped --markdown=emails.orders.shipped
9. Queueing Emails:
To send emails asynchronously, you can use Laravel's queue system.
Mail::to('[email protected]')->queue(new OrderShipped());
10. Mail Logging:
In your local development environment, you might want to log emails instead of sending them. Update your .env
file:
MAIL_MAILER=log
This will log all sent emails to the storage/logs
directory.
Comments