MailerSend Laravel Driver
- Laravel 9.0+
- PHP 8.0+
- Guzzle 7.0+
- An API Key from mailersend.com
For Laravel 7.x - 8.x support see 1.x branch
You can install the package via composer:
composer require mailersend/laravel-driver
After that, you need to set MAILERSEND_API_KEY
in your .env
file:
MAILERSEND_API_KEY=
Add MailerSend as a Laravel Mailer in config/mail.php
in mailers
array:
'mailersend' => [
'transport' => 'mailersend',
],
And set environment variable MAIL_MAILER
in your .env
file
MAIL_MAILER=mailersend
Also, double check that your FROM
data is filled in .env
:
MAIL_FROM_ADDRESS=[email protected]
MAIL_FROM_NAME="App Name"
This is an example using the build mailable that you can use to send an email with.
app/Mail/TestEmail.php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;
use MailerSend\Helpers\Builder\Variable;
use MailerSend\Helpers\Builder\Personalization;
use MailerSend\LaravelDriver\MailerSendTrait;
class TestEmail extends Mailable
{
use Queueable, SerializesModels, MailerSendTrait;
public function build()
{
// Recipient for use with variables and/or personalization
$to = Arr::get($this->to, '0.address');
return $this
->view('emails.test_html')
->text('emails.test_text')
->attachFromStorageDisk('public', 'example.png')
// Additional options for MailerSend API features
->mailersend(
template_id: null,
tags: ['tag'],
personalization: [
new Personalization($to, [
'var' => 'variable',
'number' => 123,
'object' => [
'key' => 'object-value'
],
'objectCollection' => [
[
'name' => 'John'
],
[
'name' => 'Patrick'
]
],
])
],
precedenceBulkHeader: true,
sendAt: new Carbon('2022-01-28 11:53:20'),
);
}
}
This is an example using the new mailable syntax that you can use to send an email with.
app/Mail/TestEmail.php
<?php
namespace App\Mail;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;
use MailerSend\Helpers\Builder\Personalization;
use MailerSend\Helpers\Builder\Variable;
use MailerSend\LaravelDriver\MailerSendTrait;
class TestEmail extends Mailable
{
use Queueable, SerializesModels, MailerSendTrait;
/**
* Create a new message instance.
*/
public function __construct()
{
//
}
/**
* Get the message envelope.
*/
public function envelope(): Envelope
{
return new Envelope(
subject: 'Test Email',
);
}
/**
* Get the message content definition.
*/
public function content(): Content
{
$to = Arr::get($this->to, '0.address');
// Additional options for MailerSend API features
$this->mailersend(
template_id: null,
tags: ['tag'],
personalization: [
new Personalization($to, [
'var' => 'variable',
'number' => 123,
'object' => [
'key' => 'object-value'
],
'objectCollection' => [
[
'name' => 'John'
],
[
'name' => 'Patrick'
]
],
])
],
precedenceBulkHeader: true,
sendAt: new Carbon('2022-01-28 11:53:20'),
);
return new Content(
view: 'emails.test_html',
text: 'emails.test_text'
);
}
/**
* Get the attachments for the message.
*
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
*/
public function attachments(): array
{
return [
Attachment::fromStorageDisk('public', 'example.png')
];
}
}
We provide a MailerSendTrait
trait that adds a mailersend
method to the mailable and allows you to use additional options that are available through our API.
After creating the mailable, you can send it using:
use App\Mail\TestEmail;
use Illuminate\Support\Facades\Mail;
Mail::to('[email protected]')
->cc('[email protected]')
->bcc('[email protected]')
->send(new TestEmail());
Please refer to Laravel Mail documenation and MailerSend API documentation for more information.
In case you find any bugs, submit an issue directly here in GitHub.
If you have any troubles using our driver, feel free to contact our support by email [email protected]
Official API documentation is at https://developers.mailersend.com