Automatic DKIM signing
Gmail knows it's really you
When you add a domain, we generate a 2048-bit key pair. Paste the public key into DNS, and every message is signed from then on.Call one endpoint, and your verification codes and notifications arrive.
const res = await fetch("https://bulkmail.dev/emails", {
method: "POST",
headers: {
"Authorization": "Bearer mk_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "Acme <hello@acme.com>",
to: "user@example.com",
subject: "Your verification code is 382915",
html: "<p>The code expires in 10 minutes.</p>",
}),
});
import requests
requests.post(
"https://bulkmail.dev/emails",
headers={"Authorization": "Bearer mk_your_api_key"},
json={
"from": "Acme <hello@acme.com>",
"to": "user@example.com",
"subject": "Your verification code is 382915",
"html": "<p>The code expires in 10 minutes.</p>",
},
)
curl -X POST https://bulkmail.dev/emails \
-H "Authorization: Bearer mk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@acme.com>",
"to": "user@example.com",
"subject": "Your verification code is 382915",
"html": "<p>The code expires in 10 minutes.</p>"
}'
Gmail knows it's really you
When you add a domain, we generate a 2048-bit key pair. Paste the public key into DNS, and every message is signed from then on.Other senders can't drag you down
Free users, paid users and dedicated-IP customers send from different IPs, so their reputations never mix.Status changes pushed to you instantly
Deliveries, delays, bounces and complaints all go to your webhook. Requests are signed, and we retry if your server is down.Your reputation stays intact
Addresses that don't exist and recipients who complained are skipped next time, so you don't keep hitting them.Subjects and names show as written
Chinese and other non-ASCII sender names and subjects are encoded to spec, so Gmail, Outlook and QQ Mail show exactly what you wrote.mail.acme.com
Enter your domain in the dashboard and we generate the DNS records it needs.
Cloudflare · Route 53 · Alibaba Cloud
Add them at your DNS provider. Once they're live we detect them automatically, so there's no need to come back and click verify.
POST /emails
Create an API key, send one POST request, and your email joins the send queue.
$ curl -X POST bulkmail.dev/domains -d '{"name":"mail.acme.com"}' 201 Created · 4 DNS records to add $ dig +short TXT bm1a2b._domainkey.mail.acme.com "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOC…" ✓ mail.acme.com verified $ curl -X POST bulkmail.dev/emails -d @welcome.json 202 Accepted · {"id":"9db6562a…","status":"queued"} ✓ Delivered to user@example.com (2.1s)
See what happened to every message and exactly what the receiving server said.
// POST https://your-app.com/webhooks/mail { "type": "email.delivered", "data": { "recipient": "user@example.com", "detail": "250 2.0.0 OK" } }
Prepay 3 months: 5% off · 6 months: 10% off · 12 months: 20% offEvery plan includes DKIM signing, webhooks, automatic bounce suppression, and the full API and docs. Pay monthly and cancel anytime.
For more detail, see the Docs.
Verification codes, signup confirmations, password resets, order and billing notices, system alerts: email that users trigger themselves and expect to receive. Unsolicited bulk advertising is not allowed. Accounts caught doing it are suspended, to protect everyone’s reputation.
Gmail and Outlook now check SPF, DKIM and DMARC, and unauthenticated mail mostly goes straight to spam. Verification also proves the domain is yours, so nobody else can send in your name.
Pay with USDT (TRC20) and your plan activates automatically a minute or two after the transfer confirms. To pay by Alipay, WeChat Pay or bank transfer, leave your contact details in the dashboard. We’ll reach out and activate your plan as soon as payment arrives.
The API returns 429 and the email is not sent. The daily quota resets at 00:00 UTC, and the monthly quota resets on the 1st.
A few now and then are fine. Those addresses are suppressed automatically and skipped next time. But if your bounce or complaint rate over the last 7 days gets too high, your account is suspended, so don’t send to bought lists.
First check in the dashboard that your domain’s DKIM and SPF both show “Pass”, then add a DMARC record. Write like a person, not a page full of links and images. A new domain starts with average reputation, so ramp up volume gradually. Things get much better within a week or two.
No credit card needed. 100 free emails a day.