Laravel Tutorials

Dynamic Mailer Configuration in Laravel with Mail::build

Published
Dynamic Mailer Configuration in Laravel with Mail::build image

Need to configure mailers dynamically? Laravel's Mail::build method lets you create mailers on the fly! Let's explore this flexible approach to email configuration.

Basic Usage

Here's how to create a mailer dynamically:

use Illuminate\Support\Facades\Mail;
 
$mailer = Mail::build([
'transport' => 'smtp',
'host' => '127.0.0.1',
'port' => 587,
'encryption' => 'tls',
'username' => 'usr',
'password' => 'pwd',
'timeout' => 5,
]);
 
$mailer->send($mailable);

Real-World Example

Here's how you might use it in a multi-tenant application:

class TenantMailService
{
public function sendWithTenantConfig(
Tenant $tenant,
Mailable $mailable
) {
$mailerConfig = $tenant->email_settings;
 
$mailer = Mail::build([
'transport' => 'smtp',
'host' => $mailerConfig->smtp_host,
'port' => $mailerConfig->smtp_port,
'encryption' => $mailerConfig->encryption,
'username' => decrypt($mailerConfig->username),
'password' => decrypt($mailerConfig->password),
'from' => [
'address' => $tenant->email,
'name' => $tenant->company_name
]
]);
 
try {
$mailer->send($mailable);
 
Log::info("Email sent for tenant: {$tenant->id}", [
'mailable' => get_class($mailable)
]);
 
} catch (Exception $e) {
Log::error("Failed to send email for tenant: {$tenant->id}", [
'error' => $e->getMessage()
]);
 
throw $e;
}
}
}
 
// Usage
class NewsletterController extends Controller
{
public function send(
Tenant $tenant,
TenantMailService $mailService
) {
$newsletter = new TenantNewsletter($tenant);
 
$mailService->sendWithTenantConfig(
$tenant,
$newsletter
);
 
return back()->with('success', 'Newsletter queued for sending');
}
}

Dynamic mailer configuration is perfect for multi-tenant applications, custom email providers, or any scenario where mail settings need to be configured at runtime.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

masteringlaravel logo
Laravel Code Review

Get expert guidance in a few days with a Laravel code review

Visit Laravel Code Review

The latest

View all →
Unlearn.dev goes free for a weekend, October 10 and 11 image

Unlearn.dev goes free for a weekend, October 10 and 11

Read article
Tashil: Laravel Subscription Plans and Feature Usage Limits image

Tashil: Laravel Subscription Plans and Feature Usage Limits

Read article
Decide with Jev: Laravel AI That Answers with a Probability image

Decide with Jev: Laravel AI That Answers with a Probability

Read article
JetBrains Air: Run AI Coding Agents in JetBrains IDEs image

JetBrains Air: Run AI Coding Agents in JetBrains IDEs

Read article
Memoize Tagged Cache Reads in Laravel image

Memoize Tagged Cache Reads in Laravel

Read article
Eloquent Refreshes: Load Generated Columns After Save image

Eloquent Refreshes: Load Generated Columns After Save

Read article