Node Identity
| Property | Value |
| Resource | email |
| Operation | send |
| Node Type | Integration / Action |
| Output Ports | success, error |
Recipient Configuration
| Property | Type | Required | Description |
to |
string / array |
Required |
Primary recipient(s). Accepts a single email address, a comma-separated string, or an array expression. Example: {{ vars.customer_email }} or ["alice@co.com","bob@co.com"]. |
cc |
string / array |
Optional |
Carbon copy recipients. Same format as to. Recipients can see all CC addresses. |
bcc |
string / array |
Optional |
Blind carbon copy recipients. Same format as to. BCC addresses are hidden from all other recipients. |
reply_to |
string |
Optional |
Reply-to email address. When set, replies go to this address instead of the sender address. Useful for no-reply senders with a monitored reply inbox. |
Message Content
| Property | Type | Required | Description |
subject |
string |
Required |
Email subject line. Supports BizFirst expressions. Example: Your Order {{ vars.order_number }} is Confirmed. |
body |
string |
Optional |
Plain text email body. Displayed by email clients that do not render HTML. Supports BizFirst expressions. If html_body is provided, this becomes the fallback. |
html_body |
string |
Optional |
Full HTML email body. Supports BizFirst expressions and Liquid template syntax for loops, conditionals, and formatting. Must be a valid HTML document or fragment. |
from_name |
string |
Optional |
Display name for the sender. Appears as the "From" name in the recipient's inbox. Example: BizFirst Notifications or {{ vars.company_name }} Orders. |
from_email |
string |
Optional |
Override the sender email address. Must be authorised on the SMTP server. If omitted, the SMTP credential's username is used as the sender. |
Attachments
| Property | Type | Required | Description |
attachments |
array |
Optional |
Array of attachment objects. Each object specifies the source and filename. Supports file path references, S3 object references, and inline base64 content. |
Attachment Object Schema
| Field | Type | Description |
filename | string | Filename as it will appear in the email (e.g. invoice_{{ vars.invoice_number }}.pdf). |
content_type | string | MIME type of the attachment (e.g. application/pdf, image/png). |
source | string | One of: base64, file_path, s3, workflow_variable. |
data | string | The attachment data. For base64: the encoded string. For file_path: the absolute path. For s3: the S3 URI. For workflow_variable: the variable name containing the data. |
SMTP Credential
| Property | Required | Description |
credential_id |
Required |
Reference to an SMTP credential stored in the BizFirst Credentials Manager. The credential must include: host, port, username, password, and tls_mode (one of none, starttls, ssl). |
Supported SMTP providers: SendGrid (SMTP relay), Mailgun (SMTP), AWS SES (SMTP), Postmark, Brevo (Sendinblue), Microsoft 365 SMTP, Google Workspace SMTP relay, and any standard SMTP server.
Liquid Template Support in HTML Body
The html_body field supports Liquid template syntax for dynamic HTML generation:
<h2>Order {{ order_number }} Summary</h2>
<table>
<tr><th>Product</th><th>Qty</th><th>Price</th></tr>
{% for item in order_items %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.quantity }}</td>
<td>{{ item.unit_price | currency }}</td>
</tr>
{% endfor %}
</table>
<p>Total: <strong>{{ order_total | currency }}</strong></p>
{% if order.has_discount %}
<p>Discount applied: {{ order.discount_percent }}%</p>
{% endif %}
Email deliverability: For production workflows, ensure your SMTP sender domain has valid SPF, DKIM, and DMARC records configured. Emails from domains without these records risk being flagged as spam by recipient mail servers.