Send Email (via Resend)
Sends a transactional email using Resend. Use it to send notifications, confirmations, alerts, or any programmatic email from a workflow.
This plugin requires a Resend account and API key:
- Sign up at resend.com
- Verify your sending domain in the Resend dashboard
- Create an API key at resend.com/api-keys
- Add it as an environment variable named
RESEND_API_KEYon the Env Vars page
| Handle | Type | Description |
|---|---|---|
text | string | Plain text email body. Connect an upstream string output or Code node result. |
html | string | HTML email body. Takes priority over text when connected. |
to | string | Recipient address override. Overrides the to setting — useful when the recipient is dynamic. |
| Handle | Type | Description |
|---|---|---|
result | object | Email send result |
The result (accessed as {{ email_result.* }}) shape:
| Field | Type | Description |
|---|---|---|
id | string | Resend message ID |
success | boolean | Whether the send succeeded |
error | string | Error message if success is false |
| Setting | Type | Description |
|---|---|---|
from | string | Sender address. Must be from a verified Resend domain (e.g., [email protected]). |
fromName | string | Sender display name. Appears as "Name <address>" in the inbox. Optional. |
to | string | Recipient address. Supports template bindings. Can be overridden by the to input handle. |
subject | string | Email subject line. Supports template bindings. |
replyTo | string | Optional reply-to address. |
Send a payment confirmation email when a Stripe payment succeeds:
- From:
[email protected] - From Name:
Your App Billing - To:
{{ transform.customerEmail }} - Subject:
Payment received — ${{ transform.amountFormatted }} - Text input handle: connected from a Code node that builds the email body
Code node building the body:
return f"""Hi {input['customerName']},
Your payment of ${input['amountFormatted']} has been received.
Order ID: {input['orderId']}
Date: {input['date']}
Thank you for your business.
"""
Connect an HTML string to the html input handle. When both text and html are connected, html takes priority. The text version serves as a fallback for email clients that do not render HTML.
When the recipient address comes from upstream data (e.g., a user record from a database), connect the result to the to input handle instead of hardcoding it in the settings.
- Unverified domain: Resend will reject sends from unverified domains. Verify your domain at resend.com/domains before going to production.
- Missing
RESEND_API_KEY: If the env var is not set, the node will fail at runtime with an authentication error. Add it on the Env Vars page. - Check
email_result.success: The node does not automatically stop execution if the send fails. Add an If node after Send Email to check{{ email_result.success }}if you need to handle failures.
- Code — build dynamic email body content
- Transform — shape trigger data into email fields
- Environment Variables — store your
RESEND_API_KEY
