Skip to content
Sendoff
Esc
↑↓navigate↵open⌘Jpreview
On this page

Sending an issue

Test, prepare, confirm, then watch the send go out. Every step is there so nothing reaches your list by accident.

Sending takes four steps, and the agent can’t skip any of them. Ask “send a test” when the draft looks right, and it walks you through the rest.

Test

send_test emails the current version to your reply-to address (or the sender, or up to five addresses you name), with [Test] in the subject. Check it in your real inbox, on your phone too. Its unsubscribe link is a placeholder.

Prepare

prepare_send checks that the draft renders, that your last test was of this exact version, and that the preflight checks pass. If you haven’t set a postal address, it also checks the issue doesn’t read as commercial (see When you need a postal address). It sends nothing. It returns a summary to show you: how many people it’ll go to, from which address, and roughly how long it’ll take.

Confirm

Read the summary, then tell the agent to send. confirm_send takes the confirmation from the prepare step, which expires after 15 minutes.

Watch

send_status shows how many emails are sent, failed, skipped and still to go, plus deliveries, bounces, complaints and unsubscribes so far. Once it’s out, ask how it’s doing: see Issue stats.

Any change to the draft or your settings after the test (even fixing a typo or changing the accent color) means testing again. A change after preparing invalidates the confirmation. What you test is always what your list gets.

While it sends

Sendoff snapshots your active subscribers the moment you confirm, then works through them in batches of 50 at your SES sending rate. At 14 emails a second, a common limit for a new SES account, 6,000 subscribers take about seven minutes. You can close the conversation; the send carries on without it.

Each email gets:

  • its own unsubscribe link in the footer
  • links that count clicks, through your Sendoff domain, unless you’ve turned click tracking off
  • List-Unsubscribe and List-Unsubscribe-Post headers, which give Gmail, Apple Mail and Yahoo their one-click unsubscribe button
  • your postal address, if you’ve set one

Anyone who unsubscribes, bounces or complains during the send is skipped if they haven’t been sent to yet.

When something goes wrong

  • SES slows you down. Throttled emails go back in the queue and are retried after a pause.
  • SES rejects one address. That email is marked failed with the reason, and the send carries on.
  • The account can’t send (sending paused, daily quota used up, bad credentials). The send stops, and send_status says why. Fix the cause, then ask the agent to resume; resume_send runs the preflight checks again before continuing.
  • A batch gets lost, such as when a Worker restarts mid-send. A check every five minutes restarts any send with no activity.

Sendoff sends each person at most once. If a Worker stops mid-batch and it can’t tell whether an email went out, it marks it failed instead of sending it again. One missed email is better than a duplicate to thousands of people.

Cancelling

Ask the agent to cancel a send in progress. Emails already sent can’t be recalled, everyone not yet sent to is skipped, and a cancelled issue can’t be sent again. To send it later, ask for a new draft with the same content.

Last updated on

Was this page helpful?