Email Support
ENiGMA½ uses email for:
- System notifications — password resets, 2FA registration, account unlock flows.
- Internet mail — user-to-internet email send/receive via the Internet Mail scanner/tosser.
All email is powered by Nodemailer, which supports SMTP directly as well as many pre-defined service shortcuts (Zoho, Fastmail, Sendgrid, etc.). The transport block within email must be Nodemailer-compatible.
Configuration Reference
All email configuration lives under the email block in config.hjson.
| Key | Default | Description |
|---|---|---|
defaultFrom |
— | Default From: header, e.g. "Sysop <sysop@yourbbs.net>". Also used as Sender: and envelope MAIL FROM when per-user From: is active. |
transport |
— | Nodemailer transport options (SMTP host/port/auth, or a Nodemailer service shortcut). See examples below. |
outbound.fromDomain |
(unset) | If set, outbound mail is sent as "UserName" <sanitized@fromDomain> instead of defaultFrom. See Internet Mail → Outbound Configuration for details and the honesty headers (Sender:, envelope MAIL FROM) it sets alongside. |
outbound.usernameReplaceChar |
_ |
Replacement character for invalid local-part characters when deriving a local-part from a BBS username (e.g. spaces). |
inbound |
(disabled) | Inbound IMAP polling configuration. See Internet Mail → Inbound Configuration. |
Only
defaultFromandtransportare required for system notifications (password reset, etc.). Everything underoutboundandinboundis opt-in for internet-mail send/receive.
Services
If you don’t have an SMTP server to send from, Sendgrid, Zoho, Fastmail, Purelymail, and similar providers all work out of the box — both for outbound SMTP and inbound IMAP.
Example Configurations
Example 1 — System notifications only (SMTP)
Just enough to send password-reset emails from the sysop address:
email: {
defaultFrom: "Sysop <sysop@bbs.awesome.com>"
transport: {
host: smtp.awesomeserver.com
port: 587
secure: false
auth: {
user: leisuresuitlarry
pass: sierra123
}
}
}
Example 2 — Nodemailer service shortcut (Zoho)
email: {
defaultFrom: "Sysop <sysop@bbs.awesome.com>"
transport: {
service: Zoho
auth: {
user: noreply@bbs.awesome.com
pass: yuspymypass
}
}
}
Example 3 — Full internet-mail setup (per-user From: + inbound IMAP)
email: {
defaultFrom: "ENiGMA½ BBS <noreply@yourbbs.net>"
transport: {
host: smtp.yourdomain.com
port: 587
requireTLS: true
auth: {
user: noreply@yourbbs.net
pass: yourpassword
}
}
// Send as "<UserName>" <username@yourbbs.net> instead of defaultFrom.
// Requires your SMTP provider to allow the authenticated account to
// send as other local-parts within the domain.
outbound: {
fromDomain: yourbbs.net
}
// Poll a shared IMAP mailbox and route mail to local users by
// To: local-part (usually needs a catch-all rule at your provider).
inbound: {
enabled: true
imap: {
host: imap.yourdomain.com
port: 993
secure: true
user: noreply@yourbbs.net
password: yourpassword
pollIntervalMs: 300000
processedFolder: "BBS-Processed"
failedFolder: "BBS-Failed"
}
}
}
See Internet Mail for the full reference, inbound flow details, failed-message handling, and provider-specific tips (app passwords, catch-all rules, etc.).
Password Reset / Account Unlock
If email is configured and you allow email-driven password resets, you may also allow locked accounts to be unlocked at reset time. This is controlled by users.unlockAtEmailPwReset. If an account is locked due to too many failed login attempts, the user can reset their password to remedy the situation themselves.
See Also
-
Internet Mail — full send/receive setup, inbound routing, per-user
From:behavior - Message Networks — overview of all supported networks
