Send Email
Sends transactional emails via Resend — notifications, confirmations, alerts, or any programmatic email from a workflow.
Use Send Email when you need to:
- Send confirmation or notification emails triggered by webhook events
- Deliver plain-text or HTML emails from workflow data
- Notify users after a payment, signup, or status change
- Send dynamic emails where the recipient or subject comes from upstream data
| Handle | Type | Description |
|---|---|---|
text | string | Plain text email body from a prior node. Shown by default on the canvas. |
html | string | HTML email body. Takes priority over text when connected. |
to | string | Recipient address override. Overrides the to setting when connected — useful when the recipient is fully 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 |
{
"id": "abc123-def456",
"success": true,
"error": null
}
| Setting | Type | Default | Description |
|---|---|---|---|
from | string | — | Sender email address (e.g. [email protected]). Must be from a verified Resend domain. Required. |
fromName | string | — | Sender display name. If set, appears as "Name <address>" in the recipient's inbox. |
to | string | — | Recipient email address. Supports {{ }} template expressions (e.g. {{ trigger.payload.email }}). Required unless overridden by the to input handle. |
subject | string | — | Email subject line. Supports {{ }} template expressions. Required. |
replyTo | string | — | Reply-to email address. Replies from the recipient go to this address instead of the sender. |
- Sign up at resend.com and verify your sending domain.
- Create an API key at resend.com/api-keys.
- Add it on the Env Vars page:
| Variable | Description |
|---|---|
RESEND_API_KEY | Resend API key (starts with re_...) |
Payment confirmation email after a Stripe webhook:
Webhook Trigger → Transform → Send Email
Send Email settings:
- 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.
"""
For HTML emails, connect an HTML string to the html input handle instead. When both text and html are connected, html takes priority.
import webhook from @tensorify/webhook-trigger:4.0.0
import email from @tensorify/resend-send-email:1.0.0
node trigger @tensorify/webhook-trigger:4.0.0 {
path = "/stripe/events"
method = "POST"
}
node send @tensorify/resend-send-email:1.0.0 {
from = "[email protected]"
fromName = "Your App Billing"
to = "{{ webhook.body.data.object.customer_email }}"
subject = "Payment received"
}
trigger.payload -> send.text
Send Email has an On Error control output branch. Enable it via the "Error output handle" toggle at the bottom of the settings panel.
The error branch fires when:
RESEND_API_KEYis missing or invalid- The sender domain is not verified in Resend
- The Resend API returns an error (invalid recipient, rate limit, etc.)
Connect the error branch to a fallback notification or logging action. You can also check {{ email_result.success }} on the main output path without enabling the error handle.
- Unverified domain: Resend rejects sends from unverified domains. Verify your domain at resend.com/domains before going to production.
- Missing
RESEND_API_KEY: The node fails at runtime with an authentication error if the env var is not set. - HTML vs text: When both input handles are connected,
htmltakes priority. Providetextas a fallback for clients that do not render HTML. - Dynamic recipients: When the recipient comes from upstream data, either use a binding in the To Address setting or connect the
toinput handle for a full override. - Check
email_result.success: The node does not automatically stop execution on send failure unless you connect the On Error branch or add an If node checking{{ email_result.success }}.
- Send Email on Trigger Guide — full step-by-step walkthrough
- Webhook Trigger — trigger email sends from incoming events
- Code — build dynamic email body content
- Transform — shape trigger data into email fields
- Environment Variables — store your
RESEND_API_KEY
