Specify recipients
Specify multiple recipients, CC and BCC, and named addresses when sending with Email Service.
Email Service lets you specify recipients in several ways — multiple recipients, CC and BCC, and named addresses — using the Workers binding, the REST API, or SMTP. The combined number of addresses across to, cc, and bcc must not exceed 50. See Limits.
const response = await env.EMAIL.send({ to: ["user1@example.com", "user2@example.com", "user3@example.com"], from: { email: "newsletter@yourdomain.com", name: "Newsletter Team" }, subject: "Monthly Newsletter", html: "<h1>This month's updates</h1>", text: "This month's updates",});curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "to": ["user1@example.com", "user2@example.com"], "from": { "address": "newsletter@yourdomain.com", "name": "Newsletter Team" }, "subject": "Monthly Newsletter", "html": "<h1>This month'\''s updates</h1>", "text": "This month'\''s updates" }'List every recipient in the To header and pass one --mail-rcpt flag per address.
cat > mail.txt <<EOFFrom: Newsletter Team <newsletter@yourdomain.com>To: user1@example.com, user2@example.comSubject: Monthly Newsletter
This month's updatesEOF
curl --ssl-reqd \ --url "smtps://smtp.mx.cloudflare.net:465" \ --user "api_token:<API_TOKEN>" \ --mail-from "newsletter@yourdomain.com" \ --mail-rcpt "user1@example.com" \ --mail-rcpt "user2@example.com" \ --upload-file mail.txtconst response = await env.EMAIL.send({ to: "customer@example.com", cc: ["manager@example.com"], bcc: ["archive@example.com"], from: "orders@yourdomain.com", replyTo: "support@yourdomain.com", subject: "Order Confirmation #12345", html: "<h1>Your order is confirmed</h1>", text: "Your order is confirmed",});curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "to": "customer@example.com", "cc": ["manager@example.com"], "bcc": ["archive@example.com"], "from": "orders@yourdomain.com", "reply_to": "support@yourdomain.com", "subject": "Order Confirmation #12345", "html": "<h1>Your order is confirmed</h1>", "text": "Your order is confirmed" }'Add a Cc header for CC recipients. BCC recipients are added as --mail-rcpt flags but omitted from the headers.
cat > mail.txt <<EOFFrom: orders@yourdomain.comTo: customer@example.comCc: manager@example.comReply-To: support@yourdomain.comSubject: Order Confirmation #12345
Your order is confirmedEOF
curl --ssl-reqd \ --url "smtps://smtp.mx.cloudflare.net:465" \ --user "api_token:<API_TOKEN>" \ --mail-from "orders@yourdomain.com" \ --mail-rcpt "customer@example.com" \ --mail-rcpt "manager@example.com" \ --mail-rcpt "archive@example.com" \ --upload-file mail.txtProvide a display name alongside the address for the sender and recipients.
const response = await env.EMAIL.send({ to: { email: "jane@example.com", name: "Jane Doe" }, from: { email: "support@yourdomain.com", name: "Support Team" }, subject: "Welcome!", html: "<h1>Thanks for joining!</h1>", text: "Thanks for joining!",});curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "to": { "address": "jane@example.com", "name": "Jane Doe" }, "from": { "address": "support@yourdomain.com", "name": "Support Team" }, "subject": "Welcome!", "html": "<h1>Thanks for joining!</h1>", "text": "Thanks for joining!" }'Use the Display Name <address> form in the From and To headers.
cat > mail.txt <<EOFFrom: Support Team <support@yourdomain.com>To: Jane Doe <jane@example.com>Subject: Welcome!
Thanks for joining!EOF
curl --ssl-reqd \ --url "smtps://smtp.mx.cloudflare.net:465" \ --user "api_token:<API_TOKEN>" \ --mail-from "support@yourdomain.com" \ --mail-rcpt "jane@example.com" \ --upload-file mail.txtCombine plain addresses and named addresses in the same to field.
const response = await env.EMAIL.send({ to: ["plain@example.com", { email: "jane@example.com", name: "Jane Doe" }], from: "support@yourdomain.com", subject: "Team update", html: "<h1>Monthly update</h1>", text: "Monthly update",});curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/email/sending/send" \ --header "Authorization: Bearer <API_TOKEN>" \ --header "Content-Type: application/json" \ --data '{ "to": [ "plain@example.com", { "address": "jane@example.com", "name": "Jane Doe" } ], "from": "support@yourdomain.com", "subject": "Team update", "html": "<h1>Monthly update</h1>", "text": "Monthly update" }'cat > mail.txt <<EOFFrom: support@yourdomain.comTo: plain@example.com, Jane Doe <jane@example.com>Subject: Team update
Monthly updateEOF
curl --ssl-reqd \ --url "smtps://smtp.mx.cloudflare.net:465" \ --user "api_token:<API_TOKEN>" \ --mail-from "support@yourdomain.com" \ --mail-rcpt "plain@example.com" \ --mail-rcpt "jane@example.com" \ --upload-file mail.txt- Workers API — full
send()reference. - REST API — send over HTTPS.
- SMTP — send from any SMTP-capable client.
- Email attachments — send PDFs, inline images, and uploads.