Send Email (via Resend)

Sends a transactional email using Resend. Use it to send notifications, confirmations, alerts, or any programmatic email from a workflow.

Requirements

This plugin requires a Resend account and API key:

  1. Sign up at resend.com
  2. Verify your sending domain in the Resend dashboard
  3. Create an API key at resend.com/api-keys
  4. Add it as an environment variable named RESEND_API_KEY on the Env Vars page

Inputs

HandleTypeDescription
textstringPlain text email body. Connect an upstream string output or Code node result.
htmlstringHTML email body. Takes priority over text when connected.
tostringRecipient address override. Overrides the to setting — useful when the recipient is dynamic.

Output

HandleTypeDescription
resultobjectEmail send result

The result (accessed as {{ email_result.* }}) shape:

FieldTypeDescription
idstringResend message ID
successbooleanWhether the send succeeded
errorstringError message if success is false

Settings

SettingTypeDescription
fromstringSender address. Must be from a verified Resend domain (e.g., [email protected]).
fromNamestringSender display name. Appears as "Name <address>" in the inbox. Optional.
tostringRecipient address. Supports template bindings. Can be overridden by the to input handle.
subjectstringEmail subject line. Supports template bindings.
replyTostringOptional reply-to address.

Example

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.
"""

HTML Emails

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.

Dynamic Recipients

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.

Common Gotchas

  • 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.

See Also

On this page