Mail
mail is a mail server with webmail at https://mail.xvii.network and SMTP/IMAP at
mx.xvii.network. It also carries the platform's own mail (sign-in links, notify).
Before installing: the address
Mail lives or dies by its IP's reputation. You need an address that:
- may send on outbound port 25 (many cloud providers block it);
- has reverse DNS you can set to
mx.xvii.network;
- isn't shared with a VPN, a proxy or anything that lands on block lists.
mail runs on the control plane like any service. When the control plane's own address can't send mail, an
edge server owns mx.xvii.network: xvii-node edge <control plane IP> on it relays ports 25, 587, 465,
143 and 993 to the control plane, with the real client's address passed through, and sends outgoing mail
from its own address.
Ports
| Port |
For |
| 25 |
incoming mail (MX) |
| 587 |
sending, STARTTLS |
| 465 |
sending, TLS |
| 2465 |
sending, TLS, for servers whose provider blocks 465 and 587 |
| 143 |
reading, STARTTLS |
| 993 |
reading, TLS |
Add a domain
Team admins add domains (the instance's own domain and its subdomains need a superuser). Each domain gets a
DKIM key and a DNS checklist, checked live and every hour:
| Record |
Value |
| MX |
mx.xvii.network |
| SPF (TXT) |
v=spf1 mx -all |
| DKIM (TXT) |
the key shown in the panel, under its selector |
DMARC (TXT at _dmarc) |
v=DMARC1; p=quarantine |
| PTR |
the sending IP's reverse DNS, set at your provider |
If the zone is in domains in the same team, Set up in xvii domains writes the records for
you, along with autoconfig, autodiscover and mta-sts names for mail apps. A domain receives mail
only once its MX points here.
Mailboxes and app passwords
Create mailboxes with quotas. A mailbox is read by its owner; a shared one (no owner) by the team's
developers; admins manage mailboxes but don't read others' mail.
Mail apps sign in with app passwords (xvm_…), shown once. A new one can be downloaded as an Apple
profile for iPhone, iPad and Mac. Ten failures from an address in 15 minutes lock it out.
Aliases, catch-all, dev inboxes
- Aliases deliver to mailboxes here or forward elsewhere; mailboxes can send as their aliases.
name+tag@ reaches name@; each domain can have a catch-all.
- Dev inboxes:
<anything>@<team>.inbox.xvii.network collects mail for sign-up and notification flows in
your tests; every member of the team reads it.
What happens to mail
- In: block lists, greylisting (senders whose SPF passes skip it), SPF, DKIM and DMARC.
DMARC
reject failures are refused; quarantine and hard SPF failures go to Junk.
- Out: DKIM-signed, delivered to each MX with opportunistic STARTTLS (or through a smarthost), retried
for five days, bounced as a delivery report. 500 recipients a day per mailbox by default.
Webmail
Conversations use a compact list and an expanded inline reader. HTML mail stays sandboxed; remote
images load only on request. In detail:
- Draft recovery: drafts autosave with revisions and preserve To/Cc/Bcc, files and reply context.
A conflicting save never silently overwrites the other editor's version. A draft is saved only after
the server acknowledges it.
- Send controls: Undo holds a webmail send for ten seconds before handoff. Schedule between one
minute and 90 days ahead; the composer shows the timezone and asks which offset to use when a local
time repeats. Cancel/edit restores a draft. Blocked sends require an explicit retry after recovery.
- Sender settings: authorized identities, plain-text signatures and templates. Switching identity
preserves a signature you edited yourself. Replacing existing text with a template asks first and
leaves recipients unchanged.
- Search and selection: All folders excludes Trash and Junk unless selected explicitly. Filters
survive reload; previous/next follows the actual result list. Bulk actions apply to selected
conversations in that scope, not every search result. Permanent deletion confirms the exact message
count. Keyboard shortcuts can be turned off and do not fire while typing or using a dialog.
- Filing rules: new rules start disabled and apply only to new received mail. Applying them to old
mail requires a bounded preview and confirmation; a changed sample must be previewed again. Rules
cannot bypass mandatory quarantine.
Services on the control plane send through mail over loopback with a mailbox's app password, for example
notify's SMTP_URL=smtp://no-reply@xvii.network:<app password>@127.0.0.1:10587.
Check delivery
Send to an outside mailbox (Gmail, say) and look at the headers: SPF, DKIM and DMARC should pass. A new IP
and domain usually land in spam until they earn a reputation. If sending times out, the port is blocked by
your provider; no template change fixes that.
Limits mail.domains, mail.mailboxes, mail.storage.