Skip to content

Transactional email vs marketing email: the differences, and how to send each

Published Updated 7 min readBy the Rasket team

One envelope travelling along a straight rail beside a fan of five envelopes spreading outwards from a single point, drawn as white and violet outlines on black.

What transactional email is

A transactional email is a message sent to one person as the direct result of something that person did. A receipt after a payment. A password reset after a reset request. A shipping notice after a parcel moved. One recipient, one cause, and a message that is close to worthless an hour later.

That definition does the work, because every practical rule follows from it. Nobody has to opt in to a receipt: buying the thing is the request. There is nothing to unsubscribe from, because the mail is not a series. The timing is not yours to choose — it is decided by the event. And the volume is whatever your customers happen to do today.

Transactional mail is also the mail people notice when it is missing. A newsletter that arrives a day late is a newsletter. A password reset that arrives a day late is a support ticket, and probably a lost customer.

What marketing email is

A marketing email — bulk mail, a campaign, a broadcast, a newsletter — is sent to many people because you decided to send it. The recipients are a list you built. The timing is yours. The content is promotional, or at least discretionary: an announcement, a digest, an offer.

Because you chose to send it, the burden shifts. The recipient has to have agreed to be on the list, they have to be able to get off it in one action, and the message has to say who you are and where you are. In the United States those last points are statutory: the FTC’s CAN-SPAM guidance requires a valid physical postal address and a working opt-out in commercial email. Elsewhere the consent rules are stricter still.

The line is the content, not the list

Adding one promotion to a receipt does not make it half-transactional. It makes the whole message commercial, and the rules that govern marketing mail start to apply to it. If you want to advertise in a receipt, decide that deliberately and treat the result as marketing.

The differences that matter

Most comparisons of transactional email vs marketing email stop at “one is triggered, one is scheduled”. The differences that actually change your code are further down.

How transactional and marketing email differ
TransactionalMarketing
TriggerSomething the recipient didSomething you decided
RecipientsOneA segment
ConsentThe account or the purchase is the requestAn explicit opt-in you can evidence
UnsubscribeNone — and adding one is a mistakeOne-click, honoured immediately
Postal address in the footerNot requiredRequired for commercial mail
TimingNow, decided by the eventYours to schedule
VolumeWhatever your customers doWhatever you send
What a complaint costsA customer, and some reputationReputation, and the next campaign
ContentFacts about one accountAnnouncements, digests, offers
Best forReceipts, resets, alerts, confirmations — mail that must arriveAnnouncements, digests, launches — mail that must be wanted

Why they should not share a reputation

Mailbox providers do not score your company. They score the domain and the address the mail came from, and they do it on the behaviour of the people who receive it: opens, replies, complaints, and how many messages went to addresses that do not exist.

That is the whole argument for separating the two. A campaign to a list that has gone stale will draw complaints — that is what stale lists do. If the campaign went out from acme.example and your password resets also go out from acme.example, the complaints are spent from the same balance, and the first thing you notice is resets landing in spam for people who never saw the campaign.

The fix is boring and effective: a subdomain each. Send transactional mail from something like mail.acme.example and bulk mail from send.acme.example. They are separate sending domains, so they are separately authenticated, separately signed, and separately scored. Google’s sender guidelines say the same thing in their own words, and add the requirements every bulk sender now has to meet: authenticate with SPF and DKIM, publish a DMARC record, keep complaints low, and support one-click unsubscribe.

Verify both domains in Rasket, publish the generated DKIM, SPF and DMARC records for each, and the split costs you one afternoon and nothing thereafter. The domains page walks through what each record does.

How to send transactional email

A transactional send is one call. The message names one recipient, and it carries an idempotency key derived from the event that caused it — the order, not a random string — so that a retry after a timeout replays the original response instead of sending a second receipt.

const { body: email } = await rasket.emails.send(  {    from: "Acme <billing@acme.example>",    to: ["ronald.williams@example.com"],    subject: "Your receipt for order 1042",    html: receiptHtml(order),  },  { idempotencyKey: `receipt-${order.id}` },);

Three things are deliberately absent. There is no list, because there is no list. There is no unsubscribe, because there is nothing to unsubscribe from. And there is no schedule, because the event already decided when this goes out.

What you do want is the id that comes back, stored against the order, so that when the customer says they never got the receipt you can answer with what actually happened to it rather than with a shrug. Delivery, bounce and complaint events arrive as signed webhooks against that same id.

How to send marketing email

A broadcast is three objects rather than one: the people, what they agreed to hear about, and the message. Contacts hold the addresses and their properties. A topic is a thing somebody subscribes to — “Product updates”, “Security bulletins” — so that unsubscribing from one does not silence all of them. A broadcast goes to a segment, under a topic.

const { body: topic } = await rasket.topics.create({  name: "Product updates",  description: "What shipped, once a month.",});
await rasket.contacts.create({  email: "ronald.williams@example.com",  first_name: "Ronald",  topic_ids: [topic.id],});
const { body: broadcast } = await rasket.broadcasts.create({  name: "September product update",  segment_id: segment.id,  topic_id: topic.id,  from: "Acme <news@send.acme.example>",  subject: "What shipped in September",  html: "<p>Hello {{{FIRST_NAME|there}}} …</p>",  send: true,});

The unsubscribe is not optional

Every broadcast leaves with the two headers RFC 8058 defines, which is what lets a mailbox provider show its own unsubscribe control and act on it with a single POST rather than sending the reader hunting through a footer:

List-Unsubscribe: <https://www.rasket.com/u/…>, <mailto:unsubscribe@…>
List-Unsubscribe-Post: List-Unsubscribe=One-Click

The body needs a visible way out too. Put {{{UNSUBSCRIBE_URL}}} or {{{PREFERENCES_URL}}} in your template where you want it; if a body has neither, a footer carrying an unsubscribe link and your postal address is appended, so no broadcast can leave without one. Opting out is honoured immediately and is recorded against the topic, not against the person’s entire relationship with you.

Before you press send

The three things worth checking every time: the segment is the people you meant, the sending domain is the bulk one rather than the transactional one, and somebody has read the subject line out loud. The first two are the ones that are expensive to get wrong.

One product for both

Keeping the two kinds of mail apart does not mean keeping them in two vendors. What it means is that one product has to offer two genuinely different paths — and a great many products offer one path and a checkbox.

  • A single send that is idempotent, immediate and unsubscribe-free, for mail caused by an event.
  • An audience — contacts, properties, segments, topics — and a broadcast that runs through the same delivery pipeline, with consent and one-click unsubscribe enforced on the way out.
  • Separate domains, separate keys and one log, so you can answer “what happened to this message” the same way for both.

That is the shape Rasket is built in: an email API for developers that sends transactional mail and broadcasts, behind one key, with the two paths kept honestly separate. The email API page covers the first, broadcasts covers the second, and the glossary defines the words this post used without stopping to explain.

Frequently asked questions

Is a password reset a transactional email?

Yes, and it is the clearest example there is. One person asked for it, it is about their own account, and it is useless five minutes later. Nothing about it is promotional, so it does not need consent beyond the account itself and it should never be held back behind a marketing preference.

Does a transactional email need an unsubscribe link?

No, and adding one is usually a mistake. An unsubscribe on a receipt invites somebody to opt out of the mail that proves they were charged. What a transactional message does need is to stay transactional: the moment you add a promotion to it, the rules that govern marketing mail start to apply to it.

Can I send both kinds from the same domain?

You can, but a subdomain each is the safer arrangement. Reputation is scored per sending domain, so a broadcast that draws complaints can drag down the receipts that go out beside it. Splitting them means a bad campaign costs you a campaign, not your password resets.

What is the one-click unsubscribe header?

RFC 8058 defines a pair of headers, List-Unsubscribe and List-Unsubscribe-Post, that let a mailbox provider show an unsubscribe control in its own interface and act on it with a single POST. Large providers expect bulk senders to support it. Rasket sets both headers on every broadcast.

Do I need consent for transactional email?

You need a relationship, which the account itself supplies. Somebody who bought from you has asked, implicitly, to be told what happened to their order. That is not a standing invitation to send them a newsletter, which is why the two kinds of mail keep separate lists.

Should marketing and transactional email use separate API keys?

It is worth doing. A key is the unit you can revoke, and it is also the unit you can filter the log by, so separate keys give you a clean answer to which system sent a message and a way to stop one of them without stopping the other.

Sources

  1. RFC 8058: Signaling One-Click Functionality for List Email HeadersIETF, read 2026-09-16
  2. RFC 5321: Simple Mail Transfer ProtocolIETF, read 2026-09-16
  3. Email sender guidelinesGoogle, read 2026-09-16
  4. CAN-SPAM Act: A Compliance Guide for BusinessUS Federal Trade Commission, read 2026-09-16
  • BroadcastsAn audience you own: contacts with typed properties, segments, topics people subscribe to, and broadcasts sent through the same pipeline as your other mail.
  • Email APISend email over one REST call: idempotent sends, batches, scheduling, attachments, templates and a delivery timeline for every message.
  • BroadcastsOne message to a segment: the draft, the gate, the send and the results.
  • TopicsWhat contacts subscribe to, and the preference page's list.
  • Email glossaryPlain definitions of the words that turn up in email infrastructure: DKIM, SPF, DMARC, bounces, complaints, suppressions, idempotency, webhooks and more.

Start sending this morning

Sign up, verify a domain and send your first email in minutes.