Laravel Mailable and MailChimp Integration Guide
February 25, 2024
•
14 min read
Introduction
Laravel's Mailable class provides a clean, elegant way to send emails from your application. Combined with MailChimp for marketing campaigns, you can build comprehensive email communication systems.
Creating Mailables
Generate a mailable class:
php artisan make:mailable OrderShipped
// app/Mail/OrderShipped.php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public $order;
public function __construct($order)
{
$this->order = $order;
}
public function build()
{
return $this->subject('Your Order Has Shipped')
->view('emails.orders.shipped');
}
}
Email Views
<!-- resources/views/emails/orders/shipped.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>Order Shipped</title>
</head>
<body>
<h1>Your order has shipped!</h1>
<p>Order Number: {{ $order['order_number'] }}</p>
<p>Tracking: {{ $order['tracking_number'] }}</p>
<p>Thank you for your purchase!</p>
</body>
</html>
// Adding attachments
public function build()
{
return $this->subject('Your Order Has Shipped')
->view('emails.orders.shipped')
->attach('/path/to/file.pdf', [
'as' => 'invoice.pdf',
'mime' => 'application/pdf',
]);
}
Sending Emails
// Basic sending
use App\Mail\OrderShipped;
use Illuminate\Support\Facades\Mail;
Mail::to($user->email)->send(new OrderShipped($order));
// Multiple recipients
Mail::to([
'primary@example.com',
'secondary@example.com'
])->send(new OrderShipped($order));
// With CC/BCC
Mail::to($user)
->cc('manager@example.com')
->bcc('archive@example.com')
->send(new OrderShipped($order));
// Queueing emails
Mail::to($user)->queue(new OrderShipped($order));
// Delayed queue
Mail::to($user)->later(
now()->addMinutes(10),
new OrderShipped($order)
);
MailChimp Integration
Install the MailChimp package:
composer require spatie/laravel-mailchimp-api
// config/services.php
'mailchimp' => [
'api_key' => env('MAILCHIMP_API_KEY'),
'list_id' => env('MAILCHIMP_LIST_ID'),
],
// Adding subscriber
use Spatie\MailchimpApi\Facades\MailchimpApi;
public function subscribe(Request $request)
{
MailchimpApi::lists()->addMember(
config('services.mailchimp.list_id'),
[
'email_address' => $request->email,
'status' => 'subscribed',
'merge_fields' => [
'FNAME' => $request->first_name,
'LNAME' => $request->last_name,
]
]
);
}
// Sending campaign
public function sendCampaign($subject, $content)
{
// Create campaign
$campaign = MailchimpApi::campaigns()->create([
'type' => 'regular',
'recipients' => [
'list_id' => config('services.mailchimp.list_id')
],
'settings' => [
'subject_line' => $subject,
'title' => $subject,
'from_name' => 'Your Company',
'reply_to' => 'noreply@example.com'
]
]);
// Set content
MailchimpApi::campaigns()->setContent($campaign['id'], [
'html' => $content
]);
// Send
MailchimpApi::campaigns()->send($campaign['id']);
}
Summary
Laravel Mailables provide a powerful way to send emails from your application, while MailChimp integration enables marketing campaigns. Together, they form a comprehensive email solution.
For more information, check out our other tutorials on Form Request Validation and Custom Helpers.