8 Best Free Transactional Email APIs for PHP (2026), Tested
Every provider here has a permanent free tier and either an official PHP SDK or standard SMTP support. Trials excluded, checked against current pricing pages.
criteria
- Monthly send volume
- Daily caps
- Feature limitations
- PHP SDK or SMTP support
- 01
Mailjet
Transactional Marketing6,000/mo capped at 200/day. Permanent and useful for steady low-volume sends.
- 02
Loops
Marketing TransactionalUnlimited emails on the Free plan within a 1,000-contact ceiling. Different model: optimal when your contact list grows slowly but your volume is high.
- 03
Brevo
Transactional Marketing300/day permanent. Best for low daily volumes that do not spike on launch day.
- 04
Mailtrap
Transactional Testing4,000/mo permanent on the sending side, plus a free testing tier.
- 05
Resend
Transactional3,000/mo permanent on a single domain.
- 06
MailerSend
Transactional3,000/mo permanent.
- 07
Amazon SES
TransactionalNew accounts get up to $200 in AWS credits for six months. The old 62,000/mo-from-EC2 allowance is gone.
- 08
SMTP2GO
Transactional1,000/mo permanent, no daily cap.
Send your first email from PHP
Minimal send calls on the free tier, in ranking order. Swap the from address for a domain you have verified with the provider.
$resend = Resend::client($_ENV['RESEND_API_KEY']);
$resend->emails->send([
'from' => 'you@yourdomain.com',
'to' => ['user@example.com'],
'subject' => 'Hello',
'html' => '<p>It works.</p>',
]); $client = new Aws\SesV2\SesV2Client(['region' => 'us-east-1']);
$client->sendEmail([
'FromEmailAddress' => 'you@yourdomain.com',
'Destination' => ['ToAddresses' => ['user@example.com']],
'Content' => ['Simple' => [
'Subject' => ['Data' => 'Hello'],
'Body' => ['Text' => ['Data' => 'It works.']],
]],
]); $mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'mail.smtp2go.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = $_ENV['SMTP_USER'];
$mail->Password = $_ENV['SMTP_PASS'];
$mail->setFrom('you@yourdomain.com');
$mail->addAddress('user@example.com');
$mail->Subject = 'Hello';
$mail->Body = 'It works.';
$mail->send(); All 8 compared
Every free-tier provider with PHP support. Free volume and entry pricing sit with each pick above.
| Provider | Idempotency keys | Webhooks | Event stream | Operating since | Suppressions API | Best published rate per 1,000 | Batch sending | SDKs |
|---|---|---|---|---|---|---|---|---|
| Mailjet | No | Yes | Yes | Not published | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php, java, dotnet |
| Loops | No | Yes | Yes | 2022 | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php |
| Brevo | No | Yes | Yes | 2012 | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php, java, dotnet |
| Mailtrap | No | Yes | Yes | 2014 | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php, elixir |
| Resend | Yes | Yes | Yes | 2023 | Yes | $0.35 | Yes | node, python, go, ruby, php, rust, java, elixir, cli |
| MailerSend | No | Yes | Yes | 2020 | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php |
| Amazon SES | No | No | Yes | 2011 | Yes | $0.10 | Yes | node, python, go, ruby, php, java, rust, dotnet |
| SMTP2GO | No | Yes | Yes | 2006 | Yes | Tiers not published in comparable form | Yes | node, python, go, ruby, php |
other languages
reading this as teams choosing a transactional API
Judged purely as an API. What the request contract guarantees on retry, how complete the webhook event coverage is, whether suppressions are readable and writable programmatically, and how much the message log retains when something needs debugging in production.
Applied to free PHP email sending, that means weighing idempotency keys, webhook coverage, event stream, and operating track record ahead of the rest, against high-frequency programmatic sends where a missed delivery is a product failure.