n8n-nodes-terazone-smtp
v0.1.1
Published
n8n community node for sending secure emails via Terazone SMTP using raw TCP connection
Maintainers
Readme
n8n-nodes-terazone-smtp
Custom n8n community node for sending secure emails with file attachments via Terazone SMTP using a direct raw TCP connection.
Why a Custom Node?
n8n's built-in Code node runs in a sandboxed environment that blocks direct TCP socket connections (net.createConnection). Terazone SMTP requires a raw TCP connection with no TLS and no authentication — a custom node is the only way to achieve this within n8n.
Installation
From npm (recommended)
- In your n8n instance, go to Settings > Community Nodes
- Click Install a community node
- Enter:
n8n-nodes-terazone-smtp - Click Install
The node will be available immediately — no restart needed.
Manual Installation
# Navigate to your n8n user directory
cd ~/.n8n
# Install the package
npm install n8n-nodes-terazone-smtp
# Restart n8nCredentials Setup
- In n8n, go to Credentials > Add Credential
- Search for "Terazone SMTP"
- Fill in the following fields:
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| SMTP Host | string | Yes | — | Terazone SMTP server hostname |
| SMTP Port | number | Yes | 25 | Terazone SMTP server port |
| From Address | string | Yes | — | Sender email address used in MAIL FROM |
| EHLO Domain | string | Yes | mail.example.com | Domain sent in the SMTP EHLO handshake |
| Connection Timeout (ms) | number | No | 10000 | Maximum time to wait for the SMTP connection |
Node Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| To Email | string | Yes | Recipient email address. Comma-separated for multiple recipients. |
| Subject | string | Yes | Email subject line. |
| Body | string | No | Plain text email body. |
| Phone Numbers | string | No | Comma-separated phone numbers. Appended to the subject as #phone# identifiers for tracking. |
| Attachment Source | select | Yes | Choose between Binary Property or Base64 String. |
| Binary Property Name | string | Conditional | Name of the binary property from a previous node (shown when source = Binary Property). Default: data. |
| Attachment File Name | string | Conditional | File name including extension (shown when source = Base64 String). |
| Attachment Base64 Content | string | Conditional | Base64-encoded file content (shown when source = Base64 String). |
Usage Examples
Example 1: Send a simple test email
Use a Manual Trigger connected to the Terazone Secure Mail node with these settings:
- To Email:
[email protected] - Subject:
Test from n8n - Body:
This is a test email - Phone Numbers:
0501234567 - Attachment Source:
Base64 String - Attachment File Name:
test.txt - Attachment Base64 Content:
SGVsbG8gV29ybGQ=
The SGVsbG8gV29ybGQ= value is "Hello World" in base64. The resulting subject will be: Test from n8n #0501234567#.
Example 2: Send a PDF from an HTTP Request
[Manual Trigger] → [HTTP Request] → [Terazone Secure Mail]- HTTP Request node: download a PDF with Response Format set to
File - Terazone Secure Mail node:
- Attachment Source:
Binary Property - Binary Property Name:
data
- Attachment Source:
The node automatically reads the file name and base64 content from the binary data.
Example 3: Dynamic input from previous node
All parameters support n8n expressions. Connect a Set node or any data source:
- To Email:
{{ $json.toEmail }} - Subject:
{{ $json.subject }} - Body:
{{ $json.body }} - Phone Numbers:
{{ $json.phoneNumbers }} - Attachment File Name:
{{ $json.attachmentFileName }} - Attachment Base64 Content:
{{ $json.attachmentBase64 }}
Sample input JSON for testing:
{
"toEmail": "[email protected]",
"subject": "Monthly report for January 2025",
"body": "Hello, please find the attached report.",
"phoneNumbers": "0501234567",
"attachmentFileName": "test-result.txt",
"attachmentBase64": "SGVsbG8gV29ybGQ="
}Output
On success the node outputs:
{
"success": true,
"to": ["[email protected]"],
"subject": "Test from n8n #0501234567#",
"attachmentFileName": "test.txt"
}On failure (with Continue On Fail enabled):
{
"success": false,
"error": "SMTP connection timed out after 10000ms"
}How It Works
The node opens a raw TCP socket to the Terazone SMTP server and performs the standard SMTP command sequence:
Client connects via TCP
Server: 220 ...
Client: EHLO mail.example.com
Server: 250 OK
Client: MAIL FROM: <[email protected]>
Server: ... Sender OK
Client: RCPT TO: <[email protected]>
Server: ...
Client: DATA
Server: ... Start mail input
Client: [MIME headers + multipart body with base64 attachment]
Client: .
Server: ... Queued mail for delivery
Client closes connectionKey details:
- No TLS — plain TCP connection
- No authentication — the Terazone relay does not require credentials
- MIME multipart — attachment sent as
application/octet-streamwith base64 encoding - UTF-8 support — subject and file name are encoded using RFC 2047 Base64 (
=?UTF-8?B?...?=) for Hebrew and other non-ASCII characters - Timeout — configurable, defaults to 10 seconds
Troubleshooting
| Issue | Solution |
|---|---|
| Node doesn't appear in n8n | Restart n8n after manual installation. For npm install via UI, it should appear immediately. |
| SMTP connection timed out | Verify network connectivity from the n8n server to the SMTP host:port. Check firewalls. |
| SMTP connection error: ECONNREFUSED | SMTP server is down or port is blocked by a firewall. |
| Garbled subject or filename | This is typically a mail client display issue. The node uses standard RFC 2047 Base64 UTF-8 encoding. |
| Continue On Fail shows error JSON | This is expected behavior — the node catches the error and outputs it as data instead of stopping the workflow. |
Compatibility
- n8n: >= 1.0.0
- Node.js: >= 18
- Runtime dependencies: None (uses only Node.js built-in modules
netandreadline)
License
MIT
