How to Schedule Emails From an AI Agent (Without Sending at 3 A.M.)
Agents work around the clock; recipients don't. How to have an AI agent schedule an email send for the reader's morning, with an approval step and no duplicate sends.
By Toan Nhu

Your agent finishes its work at 2:14 a.m. That doesn't mean the email should go out at 2:14 a.m. A message that lands in the middle of the night reads like a bot, sinks under the morning pile, and if something in it is wrong, nobody is awake to stop it.
Scheduled send fixes the timing. The agent writes the message when the work is done, and the mailbox delivers it when the reader is likely to see it. This guide shows how to schedule email sends from an AI agent with Mermail's API or MCP tools, plus the guardrails that keep a send queue from turning into a pile of surprises.
TL;DR — Have the agent save a draft, get a human to approve it when the message matters, then schedule that draft for a future ISO-8601 time inside the recipient's working hours. Store the returned draft id, use an idempotency key so a retry can't schedule twice, and treat "scheduled" as not sent until delivery succeeds.
Why an AI agent should schedule, not just send
- Timing reads as human. Mail that arrives at 9 a.m. local time looks like it came from a working person or a well-run team, not a script.
- It opens a review window. The hours between "scheduled" and "sent" are a chance for a person or a second check to catch a mistake.
- It spreads volume. Agents work in bursts. Scheduling turns 40 drafts finished at once into a steady stream, which helps sender reputation. See how much email an agent should send.
- It matches follow-up cadence. "Nudge them on Thursday morning" is a schedule, not a send.
How scheduled send works in Mermail
Mermail exposes scheduled send as POST /api/v1/mailboxes/{mailboxId}/scheduled-sends in the REST API and as the schedule_email_send tool on its MCP server. Both use draft-style fields instead of the send-email fields:
to, plus optionalcc,bccandsubjectbody, the message content (on the MCP tool, setbody_formattohtmlortext; Markdown is not rendered automatically)scheduled_send_at, an ISO-8601 date-time that must be in the future- optional
thread_idandin_reply_to, so a scheduled reply stays in its thread - optional
draft_id, to schedule a draft that already exists
A successful call returns 201 with the scheduled item, including its draft_id and a status of scheduled. Each schedule call is metered as an email send (5 API credits). Full reference: Schedule send in the Mermail docs.
curl -X POST "https://console.mermail.app/api/v1/mailboxes/$MAILBOX_ID/scheduled-sends" \
-H "x-api-key: $MERMAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": ["dana@example.com"],
"subject": "Your trial summary",
"body": "<p>Hi Dana, here is the summary you asked for.</p>",
"scheduled_send_at": "2026-10-20T13:00:00.000Z"
}'A safe pattern: draft, approve, schedule
- Draft first. The agent saves the message as a draft instead of sending it. Nothing leaves the mailbox yet.
- Approve when it matters. First-touch outreach, anything involving money or commitments, and new recipients should get a human read. Routine replies can skip this step once you trust them.
- Schedule the approved draft. Pass its
draft_idwithscheduled_send_at. Attachments already on the draft carry over unless you send a new set. - Record the id. Store the returned
draft_idnext to the task in your own system, so the agent can find and check it later. - Confirm delivery separately. "Scheduled" means queued, not delivered. Only report "sent" after delivery succeeds.
This is the same research, draft, approve loop we use for outreach, with a clock added at the end. More on that in AI outreach that doesn't feel like spam.
Picking the right send time
- Use the recipient's time zone, not the agent's.
scheduled_send_atis an absolute time, so convert first. For example, 9:00 a.m. in New York on October 20, 2026 is2026-10-20T13:00:00Z, because New York is on daylight time (UTC−4) until November 1. - Guess the zone from their mail. If you don't know where someone is, the offset in the Date header of their last message is a reasonable hint.
- Avoid round-number pileups. Add a few minutes of random jitter so 200 follow-ups don't all fire at exactly 09:00:00.
- Skip weekends and local holidays for business mail unless the recipient works them.
- Don't delay urgent replies to look human. If a customer wrote in during working hours, answer during working hours. Scheduling is for mail that's better later, not for stalling support.
Retries, duplicates and limits
- Make retries safe. The MCP tool accepts an
idempotencyKey. Replaying the same request returns a conflict instead of scheduling the email twice. Derive the key from the task, such asfollowup-{leadId}-day3. - Know the Free plan caps. On Free, a single request can have at most 10 total To, Cc and Bcc recipients, checked when you schedule. The rolling recipient quota is counted at delivery time, and if that limit is hit the item goes back to scheduled or deferred instead of being marked sent.
- Handle 429s. A 429 means the workspace request rate or the external recipient window was exceeded. Back off and retry later rather than looping.
- Keep a kill switch. Blocking a plus alias prevents sends from it, including pending scheduled sends. That is a quick way to stop a misbehaving agent's queue.
A scheduled send is still a send, just delayed. It should pass the same approval rules and consent checks as an immediate one. If the agent isn't allowed to send it now, it shouldn't be allowed to schedule it for later. See CAN-SPAM, GDPR and consent basics for agent email (https://mermail.app/blog/ai-agent-email-law-can-spam-gdpr-consent).
Schedules that work well for agents
- Reply-gated nudges. Don't pre-schedule a follow-up days ahead and hope nobody answers. On day three, have the agent check the thread; if there's still no reply, schedule the nudge for the next morning in the recipient's zone.
- Overnight reports. The agent compiles a digest overnight and schedules it for 8:00 a.m. where the reader is.
- Meeting follow-ups. Draft the recap right after the call, have someone review it, and schedule it for later that afternoon.
- Batch outreach. Approve a batch of drafts in the morning, then let the schedule spread them across the working day.
FAQ
Can an AI agent schedule an email over MCP?
Yes. On Mermail's MCP server the tool is schedule_email_send. Give it the mailbox id, the message body with body_format, and a future scheduled_send_at.
What format does scheduled_send_at use?
An ISO-8601 date-time in the future, such as 2026-10-20T13:00:00.000Z. Always include Z or an explicit offset so there is no ambiguity about the zone.
Does a scheduled email count as sent?
No. A scheduled status means the message is queued. Report it as sent only after delivery succeeds.
How many API credits does a scheduled send use?
Five per schedule call, metered as email_send.
What if a scheduled follow-up is no longer needed?
Avoid the problem by not scheduling reply-dependent mail far in advance. Check the thread first and schedule close to the send time, and keep the draft_id so the agent can find the item if plans change.
Ready to try it? Set up an agent inbox on the Free plan, then let your agent draft tonight and deliver tomorrow morning.


