Send email
BetaChanges data
Sends one transactional email with a subject and a body you compose.
Settings
| Setting | What it is |
|---|---|
| ConnectionRequired | The Mailchimp Transactional connection the step signs in with. |
| From addressRequired | Must be on a domain you verified in Mailchimp Transactional — mail from an unverified domain comes back refused with the reason unsigned. |
| From name | text |
| To | Comma-separated. For a list from an earlier node, write {{ join(trigger.recipients, ", ") }}. |
| Cc | text |
| Bcc | text |
| Subject | text |
| Attachments | The key is the file name, the value its base64 — Pick file… fills both in. The type is taken from the file's extension; use Attachments (JSON) below to set it yourself. Everything together must stay under 25 MB, and base64 is about a third larger than the file on disk. |
| Inline images | The key is the content id you reference from the HTML as <img src="cid:the-key">. Only image files: Mailchimp refuses an inline attachment whose type does not start with image/. |
| Merge values | *|NAME|* in the body is replaced by the value here. A name may not start with an underscore. |
| Merge language | In Handlebars mode the braces belong to Mailchimp, so a Flowmage expression in the body has to be written with the Fixed/Expression switch rather than inline. |
| Tags | Comma-separated. Each tag is at most 50 characters and may not start with an underscore; Mailchimp stores only the first 100 distinct tags it sees. |
| Metadata | Stored with the message and searchable afterwards. Up to 10 fields can be indexed for search in Mailchimp's own settings. |
| Extra headers | object of text |
| Subaccount id | Routes the send through a subaccount, which must already exist. |
| Track opens | "" or "on" or "off" |
| Track clicks | "" or "on" or "off" |
| Show every recipient in To | "" or "on" or "off" |
| Send ahead of other mail | "" or "on" or "off" |
| Generate a plain-text part | "" or "on" or "off" |
| Generate an HTML part | "" or "on" or "off" |
| Inline the CSS | Mailchimp only inlines CSS on HTML under 256 KB. |
| Strip query strings from tracked links | "" or "on" or "off" |
| Log the content | Off keeps the message body out of Mailchimp's own activity log, where the Get message content node reads it from. |
| Bcc every message to | text |
| Tracking domain | A tracking domain already set up on the account; empty uses the account's own. |
| Return-path domain | Signing domain is deliberately not offered here: Mailchimp ignores it for every account created on or after 1 December 2015. |
| Google Analytics domains | Comma-separated. Links to these domains get the campaign parameters added. |
| Google Analytics campaign | text |
| Recipients (JSON) | When this is filled in it replaces To, Cc and Bcc — it is the only way to give a recipient a display name. |
| Per-recipient merge values (JSON) | One entry per recipient, each with the values that recipient's body uses. |
| Per-recipient metadata (JSON) | Stored with that recipient's copy and searchable afterwards. |
| Attachments (JSON) | Replaces the Attachments list above when it is filled in — use it when you need to set the type yourself. |
| Body | "html" or "text" or "both" |
| HTML body | text |
| Plain-text body | text |
| Send at | UTC, as 2026-10-01 09:00:00, at most a year ahead. A time in the past sends immediately, and scheduling needs a positive account balance. |
| Dedicated IP pool | The name of a dedicated IP pool on the account; empty uses the default pool. |
| Send in the background | Every recipient comes back as queued and refusals only appear on the reject webhook. Mailchimp forces this on above 10 recipients whatever this says. |
| Fail when a recipient is refused | Mailchimp answers HTTP 200 even when it refuses a recipient. With this on, the node fails and names the reasons; with it off, the node succeeds and you read rejected from its output. |
Technical details
| Key | Value |
|---|---|
connection | texta connection id from `requires.connections` (provider `mailchimp-transactional`) |
fromEmail | text |
fromName | text |
to | text |
cc | text |
bcc | text |
subject | text |
attachments | object of text, by default {} |
images | object of text, by default {} |
globalMergeVars | object of text, by default {} |
mergeLanguage | "mailchimp" or "handlebars", by default "mailchimp" |
tags | text |
metadata | object of text, by default {} |
headers | object of text, by default {} |
subaccount | text |
trackOpens | "" or "on" or "off" |
trackClicks | "" or "on" or "off" |
preserveRecipients | "" or "on" or "off" |
important | "" or "on" or "off" |
autoText | "" or "on" or "off" |
autoHtml | "" or "on" or "off" |
inlineCss | "" or "on" or "off" |
urlStripQs | "" or "on" or "off" |
viewContentLink | "" or "on" or "off" |
bccAddress | text |
trackingDomain | text |
returnPathDomain | text |
googleAnalyticsDomains | text |
googleAnalyticsCampaign | text |
recipientsJson | textits `{{ }}` must give an array |
mergeVarsJson | textits `{{ }}` must give an array |
recipientMetadataJson | textits `{{ }}` must give an array |
attachmentsJson | textits `{{ }}` must give an array |
bodyFormat | "html" or "text" or "both", by default "html" |
html | textused when `bodyFormat` is one of "html", "both" |
text | textused when `bodyFormat` is one of "text", "both" |
sendAt | text |
ipPool | text |
async | true/false, by default false |
failOnReject | true/false, by default true |
Output
| Field | Type |
|---|---|
resultsOne entry per recipient | array |
messageIds | array |
sentRecipients sent to | number |
queuedRecipients queued | number |
scheduledRecipients scheduled | number |
rejectedRecipients refused | number |
invalidAddresses Mailchimp could not read | number |
rejectReasonsWhy recipients were refused | array |
queuedReasonsWhy recipients were queued | array |
allAcceptedEvery recipient was accepted | boolean |
Sample output, and the expression for each field
- allAcceptedtrue
- invalid0
- messageIds
- [0]"msg-1"
- queued0
- queuedReasons[]
- rejectReasons[]
- rejected0
- results
- [0]
- _id"msg-1"
- email"jane@example.com"
- status"sent"
- [0]
- scheduled0
- sent1
Errors
When a step of this node stops a run, the run page shows a code. Look it up:
Example step
The step as a flow file holds it. Replace each value in <…>.
{
"config": {
"async": false,
"attachments": {},
"attachmentsJson": "",
"autoHtml": "",
"autoText": "",
"bcc": "",
"bccAddress": "",
"bodyFormat": "html",
"cc": "",
"connection": "<connection id>",
"failOnReject": true,
"fromEmail": "<from address>",
"fromName": "",
"globalMergeVars": {},
"googleAnalyticsCampaign": "",
"googleAnalyticsDomains": "",
"headers": {},
"html": "",
"images": {},
"important": "",
"inlineCss": "",
"ipPool": "",
"mergeLanguage": "mailchimp",
"mergeVarsJson": "",
"metadata": {},
"preserveRecipients": "",
"recipientMetadataJson": "",
"recipientsJson": "",
"returnPathDomain": "",
"sendAt": "",
"subaccount": "",
"subject": "",
"tags": "",
"text": "",
"to": "",
"trackClicks": "",
"trackOpens": "",
"trackingDomain": "",
"urlStripQs": "",
"viewContentLink": ""
},
"label": "Send email",
"type": "mandrill.sendEmail",
"version": 1
}