Email

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.

:information_source: Only defaultFrom and transport are required for system notifications (password reset, etc.). Everything under outbound and inbound is 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