Description
n8n-nodes-emailconnect
An n8n community node for EmailConnect – enabling seamless email automation and webhook integration in your n8n workflows.
Features
- Domain Management: List, get details, check status, and configure your EmailConnect domains
- Alias Management: Create, read, update, and delete email aliases under your domains
- Webhook Configuration: Set up and manage webhooks for email processing automation
- Email Triggers: Receive real-time notifications when emails are processed through EmailConnect
- Filtering Options: Filter triggers by domain, alias, or event type for precise workflow control
Installation
Community Nodes (Recommended)
1. Go to Settings > Community Nodes in your n8n instance
2. Click Install a community node
3. Enter n8n-nodes-emailconnect
4. Click Install
Manual Installation
In your n8n root directory
npm install n8n-nodes-emailconnect
Docker
Add to your n8n Docker environment:
Add to your n8n Dockerfile or docker-compose
RUN npm install -g n8n-nodes-emailconnect
Configuration
1. EmailConnect API Credentials
Before using the nodes, you need to configure your EmailConnect API credentials:
1. Go to Credentials in your n8n instance
2. Click Create New Credential
3. Search for EmailConnect API
4. Enter your EmailConnect API key (get it from EmailConnect Dashboard)
#### Webhook signature verification (optional, Maker plan or higher)
EmailConnect signs every delivery with HMAC-SHA256 using the Standard Webhooks scheme. Signing proves a request came from EmailConnect; it only protects the trigger once the trigger checks it. With Verify Signatures on, the EmailConnect Trigger stores its secret on its webhook and rejects (HTTP 401) any request without a valid signature, or with a timestamp more than 5 minutes off. With it off, the trigger accepts every request to its URL, signed or not.
The secret belongs to one trigger, so each webhook can have its own:
1. Generate a secret in whsec_ + base64 format, or copy the one EmailConnect generated for the webhook:
echo "whsec_$(openssl rand -base64 24)"
2. In the EmailConnect Trigger, turn on Verify Signatures and create an EmailConnect Webhook Signing API credential holding the secret. Use one such credential per trigger.
3. Activate the workflow, or for a workflow that is already active, deactivate and reactivate it. The trigger stores the secret on its webhook at activation, replacing any secret the webhook had.
To rotate, change the secret in that credential and deactivate/reactivate the workflow. With verification on, hand-made test requests (e.g. curl) are rejected; send a real email, or EmailConnect’s Send test, to test.
2. EmailConnect Service Setup
Make sure you have:
Nodes Overview
EmailConnect Node
The main node for interacting with EmailConnect API operations.
Resources:
EmailConnect Trigger Node
A trigger node that starts workflows when EmailConnect processes emails.
Features:
– Create new aliases with webhooks
– Use existing aliases
– Use domain catch-all functionality
Usage Examples
Example 1: List All Domains
{
"nodes": [
{
"name": "Get Domains",
"type": "n8n-nodes-emailconnect.emailConnect",
"parameters": {
"resource": "domain",
"operation": "getAll"
}
}
]
}
Example 2: Create Email Alias
{
"nodes": [
{
"name": "Create Alias",
"type": "n8n-nodes-emailconnect.emailConnect",
"parameters": {
"resource": "alias",
"operation": "create",
"domainId": "your-domain-id",
"localPart": "support",
"aliasWebhookId": "your-webhook-id"
}
}
]
}
Example 3: Email Processing Trigger
{
"nodes": [
{
"name": "Email Received",
"type": "n8n-nodes-emailconnect.emailConnectTrigger",
"parameters": {
"domainId": "your-domain-id",
"aliasMode": "create",
"aliasEmail": "support@example.com",
"webhookName": "Support Email Webhook",
"webhookDescription": "Webhook for support email processing"
}
}
]
}
API Permissions
This n8n node requires an EmailConnect API key with “API User” scope, which provides:
✅ Allowed Operations:
GET /api/domains – List your domainsGET /api/domains/{domainId} – Get domain detailsGET /api/domains/{domainId}/status – Check verification statusPUT /api/domains/{domainId} – Update domain configuration (allowAttachments & includeEnvelopeData only)❌ Blocked Operations:
POST /api/domains – Create domain (use EmailConnect dashboard)DELETE /api/domains/{domain} – Delete domain (use EmailConnect dashboard)Workflow Examples
Complete Email Processing Workflow
{
"name": "EmailConnect Processing Workflow",
"nodes": [
{
"name": "Email Received Trigger",
"type": "n8n-nodes-emailconnect.emailConnectTrigger",
"parameters": {
"events": ["email.received"],
"domainFilter": "support.example.com"
}
},
{
"name": "Process Email Content",
"type": "n8n-nodes-base.function",
"parameters": {
"functionCode": "// Extract email datanconst email = items[0].json;nreturn [{n json: {n sender: email.sender,n subject: email.subject,n content: email.textContent,n receivedAt: email.receivedAtn }n}];"
}
},
{
"name": "Send to Slack",
"type": "n8n-nodes-base.slack",
"parameters": {
"operation": "postMessage",
"channel": "#support",
"text": "New email from {{$node['Process Email Content'].json['sender']}}: {{$node['Process Email Content'].json['subject']}}"
}
}
]
}
Domain Status Monitoring
{
"name": "Domain Status Monitor",
"nodes": [
{
"name": "Get All Domains",
"type": "n8n-nodes-emailconnect.emailConnect",
"parameters": {
"resource": "domain",
"operation": "getAll"
}
},
{
"name": "Check Each Domain Status",
"type": "n8n-nodes-emailconnect.emailConnect",
"parameters": {
"resource": "domain",
"operation": "getStatus",
"domainId": "={{$json.id}}"
}
},
{
"name": "Alert on Issues",
"type": "n8n-nodes-base.if",
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.status}}",
"operation": "notEqual",
"value2": "verified"
}
]
}
}
}
]
}
Known Limitations
Webhook Cleanup on Node Deletion
⚠️ Important: Due to changes in n8n 1.15.0+, webhooks are not automatically deleted when EmailConnect trigger nodes are removed from workflows. This is a limitation of the n8n framework, not a bug in this node.
Impact: Deleted trigger nodes may leave “orphaned” webhooks in your EmailConnect account.
Solution: Manually clean up unused webhooks via the EmailConnect Webhooks Dashboard.
Why this happens: n8n no longer calls webhook deregistration methods to improve performance, assuming third-party services will handle webhook retries gracefully.
Troubleshooting
Common Issues
“Invalid API Key” Error
“Domain not found” Error
Webhook not receiving data
Trigger returns 401 “Invalid webhook signature”
“Webhook signing requires an EmailConnect Maker plan or higher” on activation
“Insufficient permissions” Error
Catch-all Alias Issues
*@domain.com) are automatically updated when recreatedGetting Help
Development
Building from Source
git clone https://github.com/xadi-hq/n8n-nodes-emailconnect.git
cd n8n-nodes-emailconnect
npm install
npm run build
Testing
npm test
Linting
npm run lint # eslint-plugin-n8n-nodes-base rules
npm run lint:n8n # the rules n8n's community-package scanner enforces for verification
npm run hooks:install # once per clone: run both before every git push
lint:n8n runs the lint step of npx @n8n/scan-community-package against your working tree instead of the published package. Its pinned dependencies live in tools/n8n-scan and install on first run.
Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests for new functionality
5. Submit a pull request
License
MIT License – see LICENSE file for details.
Changelog
See CHANGELOG.md and the GitHub releases for the full version history.
Detailed Node Documentation
EmailConnect Node Operations
#### Domain Operations
Get All Domains
getAllGet Domain
get – domainId (required): The ID of the domain to retrieve
Get Domain Status
getStatus – domainId (required): The ID of the domain to check
Update Domain Configuration
updateConfig – domainId (required): The ID of the domain to update
– allowAttachments (boolean): Whether to deliver email attachments, including images embedded in the HTML body (when off, those images are left out of the payload)
– includeEnvelopeData (boolean): Whether to include SMTP envelope data
#### Alias Operations
Get All Aliases
getAll – domainId (required): The domain ID to list aliases for
Get Alias
get – aliasId (required): The ID of the alias to retrieve
Create Alias
create – domainId (required): The domain the alias belongs to
– localPart (required): The part before the @ (e.g. support for support@yourdomain.com, or * for catch-all)
– aliasWebhookId (required): The webhook that receives email sent to this alias
– Additional Fields (optional): active, allowAttachments, includeEnvelope, includeHtml, includeText
Update Alias
update – aliasId (required): The ID of the alias to update
– Update Fields (at least one): email, webhookId, active, allowAttachments, includeEnvelope, includeHtml, includeText
Delete Alias
delete – aliasId (required): The ID of the alias to delete
#### Webhook Operations
Get All Webhooks
getAll – domainId (optional): Filter webhooks by domain
Get Webhook
get – webhookId (required): The ID of the webhook to retrieve
Create Webhook
create – domainId (optional): Domain to associate webhook with
– aliasId (optional): Alias to associate webhook with
– url (required): Webhook endpoint URL
– description (optional): Webhook description
Update Webhook
update – webhookId (required): The ID of the webhook to update
– url (optional): New webhook URL
– description (optional): New description
Delete Webhook
delete – webhookId (required): The ID of the webhook to delete
EmailConnect Trigger Node
The trigger node receives webhook data from EmailConnect when emails are processed.
#### Configuration Options
Alias Modes
*@domain.com) for the domainWebhook Management
When you stop listening or deactivate the workflow
#### Webhook Data Structure
The trigger emits the EmailConnect webhook payload exactly as received. Abridged example (payload schema version 2, live from 9 November 2026):
{
"schemaVersion": 2,
"id": "msg_cmsample0000000000000000",
"domainId": "domain-id",
"aliasId": "alias-id",
"message": {
"sender": { "email": "sender@example.com", "name": "Jane Doe" },
"recipient": { "email": "inbox@yourdomain.com", "name": null },
"subject": "Invoice 42",
"date": "2026-11-09T10:30:00.000Z",
"content": {
"text": "Please find the invoice attached.",
"html": "Please find the invoice attached.

",
"markdown": "Please find the invoice attached.nn!Logo",
"links": [],
"reply": { "text": "Please find the invoice attached." }
},
"attachments": [
{
"filename": "invoice.pdf",
"contentType": "application/pdf",
"size": 102400,
"contentId": null,
"inline": false,
"status": "completed",
"downloadUrl": "https://app.emailconnect.eu/attachments/0123456789abcdef0123456789abcdef/download"
},
{
"filename": "logo.png",
"contentType": "image/png",
"size": 2048,
"contentId": "logo@example.com",
"inline": true,
"status": "included",
"content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="
},
{
"filename": "recording.mp4",
"contentType": "video/mp4",
"size": 15728640,
"contentId": null,
"inline": false,
"status": "excluded",
"reason": "too-large",
"reasonDetail": "15.00 MB, limit 10 MB"
}
]
},
"envelope": {
"messageId": "",
"allRecipients": { "to": ["inbox@yourdomain.com"], "cc": [], "bcc": [] }
},
"spam": {
"score": 0.5,
"engine": "rspamd",
"symbols": [{ "name": "DKIM_SIGNED", "weight": -0.1, "description": "DKIM signature present" }]
}
}
Reading attachments:
status is included (bytes in content, base64), completed (fetch downloadUrl), pending (still uploading; downloadUrl answers 202 until it finishes), excluded (left out by a rule or setting) or failed. excluded and failed entries carry a reason (for example too-large, virus-detected, disabled-in-alias-settings, storage-unreachable) and may carry a human-readable reasonDetail.cid: link in content.html and arrives once, as the attachment with inline: true and the matching contentId.spam is { "available": false, "message": "..." }. Spam details are in spam.symbols.schemaVersion tells payload shapes apart. Payloads without it use the shape before 9 November 2026 (excluded/excludeReason, storage, uploadType, spam.report, embedded images inlined as data: URIs in content.html).