//Outreach
Email outreach
Facts checked against official sources · September 9, 2026
Email outreach in Culper is a saved list plus a template or a written body, sent through Resend and reported per recipient. It lives under Outreach → Email, uses the same three-step compose wizard as SMS, and is the channel for the longer message: an endorsement announcement, a volunteer ask, a monthly update, a fundraising note.
The compliance work is done for you on every send. Each message gets its own signed unsubscribe link, the one-click unsubscribe headers that Gmail and Yahoo require of bulk senders, and a footer with the campaign name and a physical mailing address. Every unsubscribe lands on a global suppression list that no campaign can override.
What it is
An email campaign has a name, a saved voter list, a subject line, and either a template from the Templates page or a body typed directly into the wizard. Only voters on the list with an email address on file receive it. The campaign card shows sent over total recipients, failures, and unsubscribed skips, with a status badge and the time it went out.
Sends go out from Culper’s sending domain through Resend, which is the platform’s only email provider. The candidate, campaign managers, and staff can create and launch campaigns; volunteers cannot reach the page or the actions behind it.
Templates and the email editor
Templates live under Outreach → Templates and are managed by the candidate and campaign managers. The email editor is a full-screen builder with four modes. Magic is a block builder: describe what you want (“thank-you note to volunteers after this weekend’s block walk”), pick a tone, and an AI drafts a five-to-nine-block email with a subject line and a theme, which you then edit block by block; there are starter templates and quick prompts for the common asks. Visual is a drag-free, click-to-add editor with eight blocks (heading, paragraph, image, button, divider, list, signature, and raw HTML) that outputs email-safe table HTML. HTML is the code view, kept in sync with Visual. Preview renders the result at desktop width and at a 320-pixel mobile width.
Merge fields are inserted from a chip palette: first name, last name, full name, campaign name, candidate name, list name, and the unsubscribe URL. Images upload to Culper’s storage (PNG, JPG, GIF, WebP, or SVG, up to 10 MB each) and are referenced by public URL. Templates are campaign-scoped, can be duplicated or archived, and a set of platform templates is shared with every campaign. A template may also carry its own subject line, which the wizard picks up when you choose it.
Composing and launching a send
New email campaign is a three-step wizard. Audience: name the campaign and pick a saved list; the screen shows how many voters are on it and notes that only those with an email address will receive it. Email: choose a template chip or write a body, set the subject; a live preview iframe shows the rendered template and can flip between desktop and mobile. Send a test to up to five addresses first. Confirm: the subject, list, and template are summarized alongside what will happen (unsubscribed contacts excluded, footer appended, unsubscribe links injected per recipient, only voters with an email receive it, the send cannot be undone), then Launch email campaign.
Launching hands the campaign to a background job that works the list in 200-voter chunks in parallel. For each recipient it skips voters no longer on the current county roll, lowercases and trims the address so suppression matching is exact, records a suppressed address as unsubscribed, claims the recipient in the database, and only then renders and sends. The claim is what makes a retried chunk safe: it can never email the same person twice. When the chunks finish the campaign is tallied from the stored rows and marked sent.
Rendering happens per recipient. The template HTML (or your body) gets its merge fields substituted, including older snake_case fields like {{first_name}} for hand-written bodies, the subject gets the same treatment, and the footer and headers are added last.
Unsubscribe, bounces, and suppression
Every message carries an unsubscribe link built from a signed token that encodes the recipient address, the campaign, and the channel. Opening it lands on a plain confirmation page that suppresses the address on load, so it works even when the reader never clicks anything else. The same token backs a one-click endpoint, and the message headers include List-Unsubscribe and List-Unsubscribe-Post so Gmail and Yahoo can show their native unsubscribe button and honor it with a single click, as their bulk-sender rules require.
An unsubscribe writes the address to the global, campaign-agnostic suppression list and revokes consent records for it across every campaign. Future sends from any campaign skip it, including test sends. A campaign cannot remove an address from that list.
The footer states the campaign name, a physical mailing address, and a one-line notice about why the recipient is receiving the message, with the unsubscribe link, in table markup that survives Outlook. If the physical address is not configured for the platform, the job refuses to send rather than sending non-compliant mail and marks the campaign failed with the reason.
Delivery reporting
Each recipient gets a message row with the address, the status (sent or failed), the provider message ID, any error text from Resend, and the sent timestamp. Failures are stored with the provider’s reason so you can see whether an address was malformed or rejected. The campaign card rolls the rows up into sent over total, failures, and unsubscribed skips.
Scheduled sends use the same pipeline. A campaign with a future send time is claimed by a dispatcher that runs every minute and handed to the same job, so a scheduled newsletter and an immediate one share one set of suppression and roll checks.
How a local campaign uses it
School board, monthly update. You keep a list of 1,800 voters and supporters with email addresses. Each month you open the Magic editor, describe the update in two sentences, pick the warm tone, tidy the blocks, and save it as a template. The wizard picks up the template’s subject, you test it to two addresses, and launch. The card shows 1,800 sent within a minute and a few dozen failures for dead addresses, each with the reason.
City council, volunteer recruitment. A saved list of 400 people who signed up at the door or through the join form gets a short ask with a button to your volunteer signup link. You write it in the Visual editor with a heading, two paragraphs, a button, and a signature, and use the first-name field so it opens with their name.
County party, endorsement announcement. The party emails 9,000 voters the morning an endorsement lands. The message is drafted in Magic, tested to three staffers, previewed at mobile width because most of the list reads on a phone, and launched. Unsubscribes from that send are honored for every candidate the party emails afterward.
Why it matters
Email is the cheapest way to keep the people who already like you informed, and the list you email is the same list you text, walk, and mail, so the response to one channel sharpens the next. The targeting logic behind that (likely voters first, then everyone else) is in How many votes does it take to win a local election.
It is also where compliance is easiest to get wrong quietly. Missing unsubscribe headers or a missing postal address do not produce an error; they produce a spam-folder placement rate you never see. Culper builds those in on every send. For the texting side of the same rules, see Political texting rules: TCPA and 10DLC; for using email to chase mail ballots, see Ballot chase in vote-by-mail states.
What it does not do
Email outreach is built for list sends with correct unsubscribe handling. Some things a dedicated newsletter product does are not here yet.
- Sends go out from Culper’s sending domain, not your own domain, and do not set a reply-to address. Replies to a bulk email are not routed back to you.
- Open and click tracking is not shown for voter email campaigns. Reporting is sent or failed per recipient.
- Hard bounces and spam complaints are not yet written back to the suppression list automatically. Unsubscribes are.
- The footer’s physical address is configured at the platform level today, not per campaign.
- No A/B subject tests, drip sequences, or automations. One campaign is one send to one list.
- Three merge fields in a typed body ({{firstName}}, {{lastName}}, {{city}}); the full chip palette is available in templates.
Works with
Email shares its audience, its compose wizard, and its suppression list with the rest of the outreach tools.
- SMS outreach, the same wizard for the other channel.
- Search, lists, and tags to build the audience.
- Direct mail, whose print templates live on the same Templates page.
- Volunteer coordination for the signup flows that feed your supporter list.
- Compliance and data security for the suppression list and consent log.
- Dashboard and reporting for outreach counts on the home screen.
Frequently asked questions
What address do campaign emails come from?
From Culper’s sending domain, delivered through Resend. Sending from your own campaign domain is not available today, and outreach emails do not set a reply-to address, so plan for replies to come through your website or phone rather than by hitting reply.
How does unsubscribe work?
Every message carries a signed per-recipient unsubscribe link plus the List-Unsubscribe and one-click headers that Gmail and Yahoo use for their native unsubscribe button. Either path writes the address to a global suppression list that every campaign on the platform honors, and it cannot be undone by a campaign.
Do I have to build a template first?
No. The wizard accepts a typed body with a subject and sends it as-is, with the footer and unsubscribe link added. Templates are for designed mail: the Magic mode drafts one from a sentence or two, and the Visual and HTML modes let you refine it and save it for reuse.
Can I see who opened the email?
Not for voter outreach campaigns today. Reporting shows sent or failed per recipient with the provider’s reason for failures, and the campaign totals for sent, failed, and unsubscribed.
Will it email people who have moved or left the roll?
No. At send time each recipient is checked against the current county roll and skipped if they were retired from it, even if an older saved list still includes them. Addresses on the suppression list are skipped and counted as unsubscribed.
Write it once, send it to the right list
Keep reading