Send Email
Send Email delivers a one-way email through one of your connected email inboxes without leaving the flow. You pick the connector that sends, define the recipient — a literal address or a flow variable — and compose a subject and body with full {{variable}} support. The node sends and moves on immediately; it does not wait for a reply. To react to replies, pair it with a Read Incoming node later in the flow.
The body can be plain text or HTML, and can optionally be wrapped in the connector's branded template so every email carries your header, colors and footer.
Typical uses: a confirmation email after the customer completes a step on WhatsApp, an internal alert to the operations team when a customer reaches a milestone, or delivering a generated PDF — or the documents the customer just uploaded — to a third party.
Prerequisites
An email connector must already exist in your tenant. It provides the "from" address, the signature and the branded template.
Any flow variables you reference — in the recipient, subject, body, or attachments — must be written by earlier nodes. To send to an address collected during onboarding, make sure an Ask Email or Read Borrower node has already captured it.
Configuration
| Option | Description |
|---|---|
connectorId | The email connector (inbox) that sends the message |
recipientType | literal for a typed address, or variable to read it from a flow variable |
to | The literal recipient addresses: one, or several separated by commas, semicolons or line breaks. Supports {{variables}} |
recipientVariable | The string variable holding the recipient when recipientType is variable. It can hold several addresses, or a list |
cc / bcc | Optional address lists, separated by commas, semicolons or line breaks. Support {{variables}} |
subject | The email subject. Supports {{variables}} |
body | The email body. Supports {{variables}} |
contentType | text or html |
useBrandedTemplate | Wraps the body in the connector's branded email template |
attachments | List of attachments, each a file variable plus an optional filename |
The editor offers variable insertion, an emoji picker and AI assist for the body, as the Message node does.
Several Recipients
To, CC and BCC each accept several addresses. Separate them with commas, semicolons or line breaks, in any mix: ana@example.com; luis@example.com works the same as one address per line. Spaces around each address are ignored. When the recipient comes from a variable, the variable can hold several addresses written the same way, or a list of addresses that an earlier node left in it, such as an HTTP Request.
Every address in To receives the same email and can see the others. Put the ones that should not see each other in BCC.
Before sending, the node cleans the three fields:
- Invalid entries are left out. The email still goes to the valid addresses, and the node leaves a warning notice per field that names the entries it dropped, for example These 'To' entries are not valid email addresses and were left out of the email: 'ana@'. Fix them in the node or in the variable that holds them.
- No valid address in To is still a failure. If not a single address in To is valid, nothing is sent and the node fails as before. The notice lists what it received and reminds you how to separate several addresses.
- Repeated addresses are removed, ignoring upper and lower case. An address repeated within a field is kept once; an address already in To is removed from CC, and one already in To or CC is removed from BCC. Nobody gets the email twice.
- With the AltScore generic sender, each field takes up to 1000 addresses. Above that, nothing is sent and the node fails with a notice asking you to split the recipients across several emails. A tenant's own email connector has no such cap.
Reading Attachments from a Variable
Each attachment row names a variable. It can hold a plain URL written by Create PDF, Workflow Execute or HTTP Request, or the attachment variable written by an Ask File node. A file variable holds either one file or a list of them (an Ask File with Multiple files turned on writes a list), and the node resolves what it finds by the shape of the value, not by the type the variable was declared with:
- One file. One attachment, with the filename you typed or, if you left it empty, the name the mail provider derives from the link.
- A list of files. One attachment per file. With a filename set, the copies are numbered:
report.pdfbecomesreport_1.pdf,report_2.pdf, and so on. - No file. The row is skipped with a warning notice on the conversation ("The variable X has no file, so node conversational-send-email has no attachment to read..."); the email still goes out with the other attachments.
- Expired link. Files captured by Ask File are signed links that expire 60 minutes after capture. The node renews an expired link on its own before handing it to the email provider; only when the renewal fails does the send fail with an error-level notice ("The file URL expired and could not be renewed. Ask the customer for the file again...").
All attachments together must stay under 20 MB; above that the send fails and the notice says so.
The publish gate accepts a file or a list in every attachment row. The flow does not publish when a row points at a variable that does not exist or is not a file or list type, or when a row has no variable selected. See Publish Gate.
Output Handles
| Handle | When |
|---|---|
| Next | The email was handed to the email provider and the flow continues |
There is no dedicated error handle. If sending fails — missing connector, invalid recipient, an attachment link that could not be renewed, attachments over the size limit, or a provider error — the node leaves an error-level notice on the conversation with the cause and the conversation follows the failure path: the customer is sent to the connector's default bot, or, when the connector has none, the conversation is left without an active flow. Read the notice in the conversation's notices panel in Chat, or aggregated in Flow Notices.
Things to Know
An invalid address never stops the email on its own. Invalid entries in any of the three fields are dropped with a warning notice and the email goes to the valid ones. The node only fails when To has no valid address at all. See Several Recipients.
Unresolved variables stay as written. A subject or body that uses {{name}} for a variable no node wrote goes out with the placeholder as written — nothing is replaced with a stand-in. Check the flow writes every variable the email uses before this node.
HTML is sanitized and gets a plain-text twin. When contentType is html the body is sanitized before sending and a plain-text version is generated automatically for clients that prefer it.
The inbox signature is appended automatically. If the connector has an email signature configured, it is added after the body — with or without the branded template.
Attachments come from variables, not uploads. You cannot attach a fixed file from the editor; put it in a variable first.