diff --git a/docs/assets/panel-redesign/panel/backup.html b/docs/assets/panel-redesign/panel/backup.html index 003fb63..d7a39a1 100644 --- a/docs/assets/panel-redesign/panel/backup.html +++ b/docs/assets/panel-redesign/panel/backup.html @@ -76,7 +76,7 @@
-
01

Full backup

+
01

Full backup

data/ (database, DKIM keys, credentials, the queue), docker-compose.yml, .env and certs/ in one archive. Restore into an empty project directory and start the same SelfPost version. The reverse-proxy vhost is not included.

@@ -94,7 +94,7 @@
-
02

Import a domain

+
02

Import a domain

A domain export from another instance — plain .json or encrypted .spde. Its DKIM key and application passwords come across, so the published DNS needs no change. The export itself is made on the domain's settings.

diff --git a/docs/assets/panel-redesign/panel/dmarc-domain.html b/docs/assets/panel-redesign/panel/dmarc-domain.html index 10f3a6a..068f67e 100644 --- a/docs/assets/panel-redesign/panel/dmarc-domain.html +++ b/docs/assets/panel-redesign/panel/dmarc-domain.html @@ -78,7 +78,7 @@
-
01

Sources · 7 days

+
01

Sources · 7 days

diff --git a/docs/assets/panel-redesign/panel/dmarc-report.html b/docs/assets/panel-redesign/panel/dmarc-report.html index 38ccbdd..4b762b2 100644 --- a/docs/assets/panel-redesign/panel/dmarc-report.html +++ b/docs/assets/panel-redesign/panel/dmarc-report.html @@ -76,7 +76,7 @@
-
01

Report

+
01

Report

Reporter
Outlook.com
diff --git a/docs/assets/panel-redesign/panel/dmarc.html b/docs/assets/panel-redesign/panel/dmarc.html index 3393405..5a1b263 100644 --- a/docs/assets/panel-redesign/panel/dmarc.html +++ b/docs/assets/panel-redesign/panel/dmarc.html @@ -74,7 +74,7 @@
-
01

Ingest

ok
+
01

Ingest

ok
Last report
2026-09-21 06:12 UTC
diff --git a/docs/assets/panel-redesign/panel/health.html b/docs/assets/panel-redesign/panel/health.html index 563002d..e64d63e 100644 --- a/docs/assets/panel-redesign/panel/health.html +++ b/docs/assets/panel-redesign/panel/health.html @@ -77,7 +77,7 @@
-
01

Machine

ok
+
01

Machine

ok
SourcePassFailDisposition
@@ -108,7 +108,7 @@
-
03

TLS certificate

warn
+
03

TLS certificate

warn
Expires
2026-10-03 09:14 UTC
@@ -134,7 +134,7 @@
-
05

Hostname and reverse DNS

ok
+
05

Hostname and reverse DNS

ok
Hostname
mail.example.org
diff --git a/docs/assets/panel-redesign/panel/help.html b/docs/assets/panel-redesign/panel/help.html index 6caead2..b718b11 100644 --- a/docs/assets/panel-redesign/panel/help.html +++ b/docs/assets/panel-redesign/panel/help.html @@ -69,7 +69,7 @@

Reference

Help

-

What each screen checks and what to do when it is not green. Every numbered section on a page links to its topic here.

+

What each screen checks or does, and what to do when it is not green. The ? in a box's head opens its topic here.

@@ -87,27 +87,61 @@
  • DNS records
  • Applications
  • Rate limits
  • +
  • Outbound log
  • Queue and retries
  • DMARC reports
  • + + + +
    01

    Overview

    -

    Health checks

    Six checks, the worst of them is the postmark. ok needs nothing; warn still delivers mail but will stop doing so if ignored; fail means mail is being lost or refused now.

    -

    TLS certificate

    The certificate Postfix presents on 465 and 587. It warns 14 days before expiry and fails once expired — clients that verify certificates then refuse to connect.

    -

    Hostname and reverse DNS

    The hostname must resolve to this server's address, and that address must resolve back to the hostname. Large receivers reject or spam-folder mail from hosts where the two disagree. The PTR record is set at your hosting provider, not in your DNS zone.

    +

    Health checks

    Six checks, and the worst of them is the postmark. ok needs nothing; warn still delivers mail but will stop doing so if ignored; fail means mail is being lost or refused now. Health shows the readings behind them: CPU and memory are the container's own, not the host's spare capacity, and network is a short window, not a daily total.

    +

    TLS certificate

    The certificate Postfix presents on 465 and 587. The reverse proxy or the image mounts it, the panel does not issue it. It warns 14 days before expiry and fails once expired, or when the file is missing or unreadable — clients that verify certificates then refuse to connect.

    +

    Hostname and reverse DNS

    The hostname (SELFPOST_HOSTNAME) must resolve to this server's address, and that address must resolve back to the hostname. Large receivers reject or spam-folder mail from hosts where the two disagree. The PTR record is set at your hosting provider, not in your DNS zone.

    02

    Outbound

    -

    DNS records

    DKIM proves the message was signed by this relay, SPF lists the addresses allowed to send for the domain, DMARC tells receivers what to do when both fail and where to report. Publish all three exactly as shown; merge SPF into an existing record rather than adding a second one.

    -

    Applications

    An application is one SASL login. It may send as any address of its domain or only as listed addresses. The password is shown once at creation or regeneration and is not stored in readable form.

    -

    Rate limits

    Level 1 is a per-IP ceiling set in .env. Level 2 is optional, per domain and per application, manual or computed from 30-day statistics, and can never exceed level 1.

    +

    DNS records

    DKIM proves the message was signed by this relay, SPF lists the addresses allowed to send for the domain, DMARC tells receivers what to do when both fail and where to report. Publish all three exactly as shown; merge SPF into an existing record rather than adding a second one. A domain's status is the worst of its three records, and results are cached for a few minutes, so use Re-check DNS after publishing. The SPF check is shallow: it looks for this server's address in the record itself and does not follow include: or redirect=, so a record that relies on them is reported as a warning, not a failure. p=none does not affect delivery; tighten to quarantine, then reject, once the reports look clean. A domain's report address is set in its Domain settings.

    +

    Applications

    An application is one SASL login, unique across all domains. It may send as any address of its domain or only as listed addresses, and, with a list of client IPs set, only from those addresses. The password is shown once at creation or regeneration and is not stored in readable form.

    +

    Rate limits

    Level 1 is a per-IP ceiling set in .env. Level 2 is optional, per domain and per application, entered by hand or computed from the last 30 days of sending, and can never exceed level 1. An application's own limit replaces its domain's.

    +

    Outbound log

    One row per message and recipient, with the status Postfix last reported: queued (accepted, nothing reported yet), sent (the receiving server took it; what the mailbox does next is not reported back), deferred (not taken yet, Postfix tries again), bounced (failed for good, or the queue lifetime ran out) and rejected (refused before queueing under a level-2 rate limit, so it never reached Postfix). A message's page lists these steps and the lines Postfix wrote about it in mail.log, found by queue id; that file is rotated daily and about two weeks are kept, so an old message may show none. Rows are deleted after the retention set in Server › Settings, 90 days by default. A domain administrator sees only the rows of their own domains.

    +

    Queue and retries

    The page lists, as postqueue -p prints it, the messages Postfix has accepted and not yet delivered: mail being sent right now and mail deferred for a later attempt. Only the global role can open it, and it only shows; nothing here deletes or forces a message. A deferred message is tried again after the first retry delay, then at gaps that double up to a cap, until the receiving server takes it or the queue lifetime runs out and it bounces; there is no attempt counter, and the box on the page shows this server's values. A queue that keeps growing means a receiver is refusing or not answering: open the message from the Outbound log to read the reason Postfix logged.

    +

    DMARC reports

    An aggregate report is the summary a receiving provider sends, usually daily, to the rua= address of your DMARC record: which servers sent mail as your domain and whether SPF or DKIM passed for it. A domain's report address is one of three choices, set in its Domain settings: no reports (the default for a new domain), the SelfPost hosted address (an address on this server whose reports are parsed and shown under DMARC reports; offered only while hosted reports are enabled on the server), or an address typed for the domain (an ordinary mailbox that receives the raw XML; a button fills in your own profile e-mail). When the typed address is on another domain than the one sending, that domain must publish a report-authorization record, or providers will not send; the domain's page shows it with the other DNS records and checks it. In the tables pass means SPF or DKIM passed and aligned, fail means neither did, and your own server shows as this relay. A fail from any other source is someone else sending as your domain — a forwarder, an application you forgot, or abuse — so do not tighten p= until that sender is fixed or removed. A domain administrator reads the reports of their own domains.

    +
    +
    +
    03

    Inbound

    +

    Backup-MX and forwarding

    An optional backup-MX or forwarder, switched on in the server's .env; the Inbound menu exists only then. Postfix accepts mail on port 25 for the listed domains only and hands each message on to that domain's upstream; there are no mailboxes. For each domain publish the MX record its page shows, and keep a primary MX the domain already has if this is a backup. The MX tag is green when at least one MX of the domain points at this server, and a domain accepts no mail until an upstream is saved on its page. Adding and deleting domains is for the global role.

    +

    Upstream

    The upstream is the server that actually holds the mailboxes. Give its host and port — used exactly as written, with no MX lookup — and choose the TLS for the hop to it: Opportunistic uses TLS when the upstream offers it and otherwise sends in the clear, Required holds the mail until a TLS session is possible, Off never uses TLS. While the upstream does not answer, Postfix keeps the mail and retries as for any other mail.

    +

    Valid recipients

    Choose whom this domain accepts. Listed addresses only: the relay accepts exactly the addresses you list, one per line or comma-separated, and refuses any other while the sender is still connected, so it never has to send a bounce for them. Any recipient: everything at the domain is accepted and passed on, and an address the upstream then rejects comes back as a bounce from this server to a sender who is often forged — backscatter. Prefer a list, and keep it in step with the mailboxes upstream.

    +

    Spam filter

    The spam filter belongs to the server, not to a domain. The server's administrator attaches it in the server's .env, and from then on every inbound domain is screened by it before mail is handed on; the box shows on or off and has nothing to switch. Off means mail goes to the upstream unfiltered. While the filter is down, mail is either accepted unfiltered (the default) or deferred, so the sending server tries again later, as the server's setting says; the box states which.

    +
    +
    +
    04

    Server

    +

    Backup and moving a domain

    Full backup downloads one archive of the whole instance: data/ (the database, DKIM keys, application credentials and the queue), docker-compose.yml, .env and certs/. It holds secrets, so leave Encrypt with a password ticked: the file is sealed as .spbk, the password is not stored, and without it nothing can be recovered. To restore, unpack it into an empty project directory (decrypt a .spbk first with selfpost-backup -decrypt) and start the same SelfPost version that made it; the panel refuses data from another version. The reverse-proxy configuration and mail.log are not included. One domain moves on its own: Export domain on its settings page writes a .json (or encrypted .spde) with its DKIM key and its applications' passwords, and Import a domain here reads it into another instance, so the published DNS needs no change.

    +

    Users and roles

    The two roles are a reach, not a rank: every user is an administrator and signs in with a username and password. Global reaches the whole server — Overview, Server, the queue and every domain — and is the only role that adds or deletes domains and users. Domain reaches only the domains assigned to it, outbound and inbound separately (the same name on both lists is two assignments); All includes domains added later, and a domain user needs at least one domain or All on either list. The only global user cannot be demoted or deleted, and you cannot delete the account you are signed in with. A new password set here signs that user out of their other sessions.

    +

    Settings

    Settings holds what is true of the whole instance. Log retention is how many days the Outbound log keeps its rows, from 7 to 365 and 90 by default; a sweep every six hours deletes older ones, and it is the main driver of how fast /data grows. It does not change the rotation of mail.log, which is daily with about two weeks kept. The sending rate limit shown under it is level 1, the per-client-IP ceiling set in .env: changing it needs a restart, and no level-2 limit can exceed it.

    +
    +
    +
    05

    Account

    +

    Your account

    Account is your own, whatever your role: your username and e-mail, and your password. Changing the password signs out every other session of this account and keeps the one you are using; applications have their own logins and are not affected.

    diff --git a/docs/assets/panel-redesign/panel/in-domain.html b/docs/assets/panel-redesign/panel/in-domain.html index 7936758..a4e42d7 100644 --- a/docs/assets/panel-redesign/panel/in-domain.html +++ b/docs/assets/panel-redesign/panel/in-domain.html @@ -116,7 +116,7 @@
    -
    02

    Upstream

    Not a mailbox
    +
    02

    Upstream

    Not a mailbox
    @@ -132,7 +132,7 @@
    -
    03

    Valid recipients

    +
    03

    Valid recipients

    @@ -151,7 +151,7 @@ security@lists.example.org
    -
    04

    Spam filter

    on
    +
    04

    Spam filter

    on
    Engine
    rspamd, for every inbound domain of this server
    diff --git a/docs/assets/panel-redesign/panel/in-domains.html b/docs/assets/panel-redesign/panel/in-domains.html index 3bb0276..0023309 100644 --- a/docs/assets/panel-redesign/panel/in-domains.html +++ b/docs/assets/panel-redesign/panel/in-domains.html @@ -87,7 +87,7 @@
    -
    02

    Domains

    Spam filter on · 2 domains
    +
    02

    Domains

    Spam filter on · 2 domains
    ResourceUsageDetail
    diff --git a/docs/assets/panel-redesign/panel/out-app.html b/docs/assets/panel-redesign/panel/out-app.html index 8957b0c..f0128de 100644 --- a/docs/assets/panel-redesign/panel/out-app.html +++ b/docs/assets/panel-redesign/panel/out-app.html @@ -97,7 +97,7 @@
    -
    02

    Client IP allow-list

    off
    +
    02

    Client IP allow-list

    off
    @@ -109,7 +109,7 @@
    -
    03

    Rate limit

    active
    +
    03

    Rate limit

    active
    diff --git a/docs/assets/panel-redesign/panel/out-domain-settings.html b/docs/assets/panel-redesign/panel/out-domain-settings.html index b86c1a2..fdfd0bf 100644 --- a/docs/assets/panel-redesign/panel/out-domain-settings.html +++ b/docs/assets/panel-redesign/panel/out-domain-settings.html @@ -76,7 +76,7 @@
    -
    01

    DMARC report address

    +
    01

    DMARC report address

    @@ -94,7 +94,7 @@
    -
    03

    Export domain

    +
    03

    Export domain

    One file with the DKIM key and every application's password hash — import it on another SelfPost and the published DNS needs no change. The file is a secret.

    diff --git a/docs/assets/panel-redesign/panel/out-log.html b/docs/assets/panel-redesign/panel/out-log.html index c3182bd..a24aeae 100644 --- a/docs/assets/panel-redesign/panel/out-log.html +++ b/docs/assets/panel-redesign/panel/out-log.html @@ -82,6 +82,7 @@
    +
    DomainDNSUpstreamRecipientsTLS to upstream
    diff --git a/docs/assets/panel-redesign/panel/out-message.html b/docs/assets/panel-redesign/panel/out-message.html index 2607ee8..e5d204a 100644 --- a/docs/assets/panel-redesign/panel/out-message.html +++ b/docs/assets/panel-redesign/panel/out-message.html @@ -91,7 +91,7 @@
    -
    02

    History

    +
    02

    History

    1. Accepted from alerts at 198.51.100.7
    2. diff --git a/docs/assets/panel-redesign/panel/out-queue.html b/docs/assets/panel-redesign/panel/out-queue.html index 762a2f2..fdd3ec4 100644 --- a/docs/assets/panel-redesign/panel/out-queue.html +++ b/docs/assets/panel-redesign/panel/out-queue.html @@ -74,7 +74,7 @@
    -
    01

    Waiting

    1 message · 3.1 kB
    +
    01

    Waiting

    1 message · 3.1 kB
    Time, UTCFromToSubjectStatus
    diff --git a/docs/assets/panel-redesign/panel/outlines.json b/docs/assets/panel-redesign/panel/outlines.json index 61d222b..6e9fe53 100644 --- a/docs/assets/panel-redesign/panel/outlines.json +++ b/docs/assets/panel-redesign/panel/outlines.json @@ -123,7 +123,10 @@ { "is-9": [ "box[Overview]:help×3", - "box[Outbound]:help×3" + "box[Outbound]:help×6", + "box[Inbound]:help×4", + "box[Server]:help×3", + "box[Account]:help" ] } ] diff --git a/docs/assets/panel-redesign/panel/settings.html b/docs/assets/panel-redesign/panel/settings.html index 993f23c..a930424 100644 --- a/docs/assets/panel-redesign/panel/settings.html +++ b/docs/assets/panel-redesign/panel/settings.html @@ -77,7 +77,7 @@
    -
    01

    Log retention

    +
    01

    Log retention

    @@ -88,7 +88,7 @@
    -
    02

    Sending rate limits

    Read-only
    +
    02

    Sending rate limits

    Read-only
    Level 1 · per client IP
    600 / h
    Set in .env; restart to change. Nothing below may exceed it.
    diff --git a/docs/assets/panel-redesign/panel/src/backup.html b/docs/assets/panel-redesign/panel/src/backup.html index d492c03..c4594fb 100644 --- a/docs/assets/panel-redesign/panel/src/backup.html +++ b/docs/assets/panel-redesign/panel/src/backup.html @@ -10,7 +10,7 @@
    -
    01

    Full backup

    +
    01

    Full backup

    data/ (database, DKIM keys, credentials, the queue), docker-compose.yml, .env and certs/ in one archive. Restore into an empty project directory and start the same SelfPost version. The reverse-proxy vhost is not included.

    @@ -28,7 +28,7 @@
    -
    02

    Import a domain

    +
    02

    Import a domain

    A domain export from another instance — plain .json or encrypted .spde. Its DKIM key and application passwords come across, so the published DNS needs no change. The export itself is made on the domain's settings.

    diff --git a/docs/assets/panel-redesign/panel/src/dmarc-domain.html b/docs/assets/panel-redesign/panel/src/dmarc-domain.html index 376c508..5cf4774 100644 --- a/docs/assets/panel-redesign/panel/src/dmarc-domain.html +++ b/docs/assets/panel-redesign/panel/src/dmarc-domain.html @@ -12,7 +12,7 @@
    -
    01

    Sources · 7 days

    +
    01

    Sources · 7 days

    Queue idArrived, UTCFromToLast reply
    diff --git a/docs/assets/panel-redesign/panel/src/dmarc-report.html b/docs/assets/panel-redesign/panel/src/dmarc-report.html index c651b99..79dc969 100644 --- a/docs/assets/panel-redesign/panel/src/dmarc-report.html +++ b/docs/assets/panel-redesign/panel/src/dmarc-report.html @@ -10,7 +10,7 @@
    -
    01

    Report

    +
    01

    Report

    Reporter
    Outlook.com
    diff --git a/docs/assets/panel-redesign/panel/src/dmarc.html b/docs/assets/panel-redesign/panel/src/dmarc.html index 3d92e79..eea8e92 100644 --- a/docs/assets/panel-redesign/panel/src/dmarc.html +++ b/docs/assets/panel-redesign/panel/src/dmarc.html @@ -8,7 +8,7 @@
    -
    01

    Ingest

    ok
    +
    01

    Ingest

    ok
    Last report
    2026-09-21 06:12 UTC
    diff --git a/docs/assets/panel-redesign/panel/src/health.html b/docs/assets/panel-redesign/panel/src/health.html index 13daf39..57513c5 100644 --- a/docs/assets/panel-redesign/panel/src/health.html +++ b/docs/assets/panel-redesign/panel/src/health.html @@ -11,7 +11,7 @@
    -
    01

    Machine

    ok
    +
    01

    Machine

    ok
    SourcePassFailDisposition
    @@ -42,7 +42,7 @@
    -
    03

    TLS certificate

    warn
    +
    03

    TLS certificate

    warn
    Expires
    2026-10-03 09:14 UTC
    @@ -68,7 +68,7 @@
    -
    05

    Hostname and reverse DNS

    ok
    +
    05

    Hostname and reverse DNS

    ok
    Hostname
    mail.example.org
    diff --git a/docs/assets/panel-redesign/panel/src/help.html b/docs/assets/panel-redesign/panel/src/help.html index 7a6abb5..fa877ea 100644 --- a/docs/assets/panel-redesign/panel/src/help.html +++ b/docs/assets/panel-redesign/panel/src/help.html @@ -3,7 +3,7 @@

    Reference

    Help

    -

    What each screen checks and what to do when it is not green. Every numbered section on a page links to its topic here.

    +

    What each screen checks or does, and what to do when it is not green. The ? in a box's head opens its topic here.

    @@ -21,27 +21,61 @@
  • DNS records
  • Applications
  • Rate limits
  • +
  • Outbound log
  • Queue and retries
  • DMARC reports
  • + + + +
    01

    Overview

    -

    Health checks

    Six checks, the worst of them is the postmark. ok needs nothing; warn still delivers mail but will stop doing so if ignored; fail means mail is being lost or refused now.

    -

    TLS certificate

    The certificate Postfix presents on 465 and 587. It warns 14 days before expiry and fails once expired — clients that verify certificates then refuse to connect.

    -

    Hostname and reverse DNS

    The hostname must resolve to this server's address, and that address must resolve back to the hostname. Large receivers reject or spam-folder mail from hosts where the two disagree. The PTR record is set at your hosting provider, not in your DNS zone.

    +

    Health checks

    Six checks, and the worst of them is the postmark. ok needs nothing; warn still delivers mail but will stop doing so if ignored; fail means mail is being lost or refused now. Health shows the readings behind them: CPU and memory are the container's own, not the host's spare capacity, and network is a short window, not a daily total.

    +

    TLS certificate

    The certificate Postfix presents on 465 and 587. The reverse proxy or the image mounts it, the panel does not issue it. It warns 14 days before expiry and fails once expired, or when the file is missing or unreadable — clients that verify certificates then refuse to connect.

    +

    Hostname and reverse DNS

    The hostname (SELFPOST_HOSTNAME) must resolve to this server's address, and that address must resolve back to the hostname. Large receivers reject or spam-folder mail from hosts where the two disagree. The PTR record is set at your hosting provider, not in your DNS zone.

    02

    Outbound

    -

    DNS records

    DKIM proves the message was signed by this relay, SPF lists the addresses allowed to send for the domain, DMARC tells receivers what to do when both fail and where to report. Publish all three exactly as shown; merge SPF into an existing record rather than adding a second one.

    -

    Applications

    An application is one SASL login. It may send as any address of its domain or only as listed addresses. The password is shown once at creation or regeneration and is not stored in readable form.

    -

    Rate limits

    Level 1 is a per-IP ceiling set in .env. Level 2 is optional, per domain and per application, manual or computed from 30-day statistics, and can never exceed level 1.

    +

    DNS records

    DKIM proves the message was signed by this relay, SPF lists the addresses allowed to send for the domain, DMARC tells receivers what to do when both fail and where to report. Publish all three exactly as shown; merge SPF into an existing record rather than adding a second one. A domain's status is the worst of its three records, and results are cached for a few minutes, so use Re-check DNS after publishing. The SPF check is shallow: it looks for this server's address in the record itself and does not follow include: or redirect=, so a record that relies on them is reported as a warning, not a failure. p=none does not affect delivery; tighten to quarantine, then reject, once the reports look clean. A domain's report address is set in its Domain settings.

    +

    Applications

    An application is one SASL login, unique across all domains. It may send as any address of its domain or only as listed addresses, and, with a list of client IPs set, only from those addresses. The password is shown once at creation or regeneration and is not stored in readable form.

    +

    Rate limits

    Level 1 is a per-IP ceiling set in .env. Level 2 is optional, per domain and per application, entered by hand or computed from the last 30 days of sending, and can never exceed level 1. An application's own limit replaces its domain's.

    +

    Outbound log

    One row per message and recipient, with the status Postfix last reported: queued (accepted, nothing reported yet), sent (the receiving server took it; what the mailbox does next is not reported back), deferred (not taken yet, Postfix tries again), bounced (failed for good, or the queue lifetime ran out) and rejected (refused before queueing under a level-2 rate limit, so it never reached Postfix). A message's page lists these steps and the lines Postfix wrote about it in mail.log, found by queue id; that file is rotated daily and about two weeks are kept, so an old message may show none. Rows are deleted after the retention set in Server › Settings, 90 days by default. A domain administrator sees only the rows of their own domains.

    +

    Queue and retries

    The page lists, as postqueue -p prints it, the messages Postfix has accepted and not yet delivered: mail being sent right now and mail deferred for a later attempt. Only the global role can open it, and it only shows; nothing here deletes or forces a message. A deferred message is tried again after the first retry delay, then at gaps that double up to a cap, until the receiving server takes it or the queue lifetime runs out and it bounces; there is no attempt counter, and the box on the page shows this server's values. A queue that keeps growing means a receiver is refusing or not answering: open the message from the Outbound log to read the reason Postfix logged.

    +

    DMARC reports

    An aggregate report is the summary a receiving provider sends, usually daily, to the rua= address of your DMARC record: which servers sent mail as your domain and whether SPF or DKIM passed for it. A domain's report address is one of three choices, set in its Domain settings: no reports (the default for a new domain), the SelfPost hosted address (an address on this server whose reports are parsed and shown under DMARC reports; offered only while hosted reports are enabled on the server), or an address typed for the domain (an ordinary mailbox that receives the raw XML; a button fills in your own profile e-mail). When the typed address is on another domain than the one sending, that domain must publish a report-authorization record, or providers will not send; the domain's page shows it with the other DNS records and checks it. In the tables pass means SPF or DKIM passed and aligned, fail means neither did, and your own server shows as this relay. A fail from any other source is someone else sending as your domain — a forwarder, an application you forgot, or abuse — so do not tighten p= until that sender is fixed or removed. A domain administrator reads the reports of their own domains.

    +
    +
    +
    03

    Inbound

    +

    Backup-MX and forwarding

    An optional backup-MX or forwarder, switched on in the server's .env; the Inbound menu exists only then. Postfix accepts mail on port 25 for the listed domains only and hands each message on to that domain's upstream; there are no mailboxes. For each domain publish the MX record its page shows, and keep a primary MX the domain already has if this is a backup. The MX tag is green when at least one MX of the domain points at this server, and a domain accepts no mail until an upstream is saved on its page. Adding and deleting domains is for the global role.

    +

    Upstream

    The upstream is the server that actually holds the mailboxes. Give its host and port — used exactly as written, with no MX lookup — and choose the TLS for the hop to it: Opportunistic uses TLS when the upstream offers it and otherwise sends in the clear, Required holds the mail until a TLS session is possible, Off never uses TLS. While the upstream does not answer, Postfix keeps the mail and retries as for any other mail.

    +

    Valid recipients

    Choose whom this domain accepts. Listed addresses only: the relay accepts exactly the addresses you list, one per line or comma-separated, and refuses any other while the sender is still connected, so it never has to send a bounce for them. Any recipient: everything at the domain is accepted and passed on, and an address the upstream then rejects comes back as a bounce from this server to a sender who is often forged — backscatter. Prefer a list, and keep it in step with the mailboxes upstream.

    +

    Spam filter

    The spam filter belongs to the server, not to a domain. The server's administrator attaches it in the server's .env, and from then on every inbound domain is screened by it before mail is handed on; the box shows on or off and has nothing to switch. Off means mail goes to the upstream unfiltered. While the filter is down, mail is either accepted unfiltered (the default) or deferred, so the sending server tries again later, as the server's setting says; the box states which.

    +
    +
    +
    04

    Server

    +

    Backup and moving a domain

    Full backup downloads one archive of the whole instance: data/ (the database, DKIM keys, application credentials and the queue), docker-compose.yml, .env and certs/. It holds secrets, so leave Encrypt with a password ticked: the file is sealed as .spbk, the password is not stored, and without it nothing can be recovered. To restore, unpack it into an empty project directory (decrypt a .spbk first with selfpost-backup -decrypt) and start the same SelfPost version that made it; the panel refuses data from another version. The reverse-proxy configuration and mail.log are not included. One domain moves on its own: Export domain on its settings page writes a .json (or encrypted .spde) with its DKIM key and its applications' passwords, and Import a domain here reads it into another instance, so the published DNS needs no change.

    +

    Users and roles

    The two roles are a reach, not a rank: every user is an administrator and signs in with a username and password. Global reaches the whole server — Overview, Server, the queue and every domain — and is the only role that adds or deletes domains and users. Domain reaches only the domains assigned to it, outbound and inbound separately (the same name on both lists is two assignments); All includes domains added later, and a domain user needs at least one domain or All on either list. The only global user cannot be demoted or deleted, and you cannot delete the account you are signed in with. A new password set here signs that user out of their other sessions.

    +

    Settings

    Settings holds what is true of the whole instance. Log retention is how many days the Outbound log keeps its rows, from 7 to 365 and 90 by default; a sweep every six hours deletes older ones, and it is the main driver of how fast /data grows. It does not change the rotation of mail.log, which is daily with about two weeks kept. The sending rate limit shown under it is level 1, the per-client-IP ceiling set in .env: changing it needs a restart, and no level-2 limit can exceed it.

    +
    +
    +
    05

    Account

    +

    Your account

    Account is your own, whatever your role: your username and e-mail, and your password. Changing the password signs out every other session of this account and keeps the one you are using; applications have their own logins and are not affected.

    diff --git a/docs/assets/panel-redesign/panel/src/in-domain.html b/docs/assets/panel-redesign/panel/src/in-domain.html index d04534f..7a1afa1 100644 --- a/docs/assets/panel-redesign/panel/src/in-domain.html +++ b/docs/assets/panel-redesign/panel/src/in-domain.html @@ -50,7 +50,7 @@
    -
    02

    Upstream

    Not a mailbox
    +
    02

    Upstream

    Not a mailbox
    @@ -66,7 +66,7 @@
    -
    03

    Valid recipients

    +
    03

    Valid recipients

    @@ -85,7 +85,7 @@ security@lists.example.org
    -
    04

    Spam filter

    on
    +
    04

    Spam filter

    on
    Engine
    rspamd, for every inbound domain of this server
    diff --git a/docs/assets/panel-redesign/panel/src/in-domains.html b/docs/assets/panel-redesign/panel/src/in-domains.html index 6362e9f..66cf729 100644 --- a/docs/assets/panel-redesign/panel/src/in-domains.html +++ b/docs/assets/panel-redesign/panel/src/in-domains.html @@ -21,7 +21,7 @@
    -
    02

    Domains

    Spam filter on · 2 domains
    +
    02

    Domains

    Spam filter on · 2 domains
    ResourceUsageDetail
    diff --git a/docs/assets/panel-redesign/panel/src/out-app.html b/docs/assets/panel-redesign/panel/src/out-app.html index ffb61c6..4a80cd4 100644 --- a/docs/assets/panel-redesign/panel/src/out-app.html +++ b/docs/assets/panel-redesign/panel/src/out-app.html @@ -31,7 +31,7 @@
    -
    02

    Client IP allow-list

    off
    +
    02

    Client IP allow-list

    off
    @@ -43,7 +43,7 @@
    -
    03

    Rate limit

    active
    +
    03

    Rate limit

    active
    diff --git a/docs/assets/panel-redesign/panel/src/out-domain-settings.html b/docs/assets/panel-redesign/panel/src/out-domain-settings.html index 9125dff..7fa44cb 100644 --- a/docs/assets/panel-redesign/panel/src/out-domain-settings.html +++ b/docs/assets/panel-redesign/panel/src/out-domain-settings.html @@ -10,7 +10,7 @@
    -
    01

    DMARC report address

    +
    01

    DMARC report address

    @@ -28,7 +28,7 @@
    -
    03

    Export domain

    +
    03

    Export domain

    One file with the DKIM key and every application's password hash — import it on another SelfPost and the published DNS needs no change. The file is a secret.

    diff --git a/docs/assets/panel-redesign/panel/src/out-log.html b/docs/assets/panel-redesign/panel/src/out-log.html index 9ddea15..73867a3 100644 --- a/docs/assets/panel-redesign/panel/src/out-log.html +++ b/docs/assets/panel-redesign/panel/src/out-log.html @@ -16,6 +16,7 @@
    +
    DomainDNSUpstreamRecipientsTLS to upstream
    diff --git a/docs/assets/panel-redesign/panel/src/out-message.html b/docs/assets/panel-redesign/panel/src/out-message.html index cdb30bc..52d5330 100644 --- a/docs/assets/panel-redesign/panel/src/out-message.html +++ b/docs/assets/panel-redesign/panel/src/out-message.html @@ -25,7 +25,7 @@
    -
    02

    History

    +
    02

    History

    1. Accepted from alerts at 198.51.100.7
    2. diff --git a/docs/assets/panel-redesign/panel/src/out-queue.html b/docs/assets/panel-redesign/panel/src/out-queue.html index 523af78..8e0e5ed 100644 --- a/docs/assets/panel-redesign/panel/src/out-queue.html +++ b/docs/assets/panel-redesign/panel/src/out-queue.html @@ -8,7 +8,7 @@
    -
    01

    Waiting

    1 message · 3.1 kB
    +
    01

    Waiting

    1 message · 3.1 kB
    Time, UTCFromToSubjectStatus
    diff --git a/docs/assets/panel-redesign/panel/src/settings.html b/docs/assets/panel-redesign/panel/src/settings.html index 36808a0..9d51a12 100644 --- a/docs/assets/panel-redesign/panel/src/settings.html +++ b/docs/assets/panel-redesign/panel/src/settings.html @@ -11,7 +11,7 @@
    -
    01

    Log retention

    +
    01

    Log retention

    @@ -22,7 +22,7 @@
    -
    02

    Sending rate limits

    Read-only
    +
    02

    Sending rate limits

    Read-only
    Level 1 · per client IP
    600 / h
    Set in .env; restart to change. Nothing below may exceed it.
    diff --git a/docs/assets/panel-redesign/panel/src/user.html b/docs/assets/panel-redesign/panel/src/user.html index e005506..1715278 100644 --- a/docs/assets/panel-redesign/panel/src/user.html +++ b/docs/assets/panel-redesign/panel/src/user.html @@ -12,7 +12,7 @@
    -
    01

    Account

    +
    01

    Account

    diff --git a/docs/assets/panel-redesign/panel/src/users.html b/docs/assets/panel-redesign/panel/src/users.html index d4947ff..5166e0a 100644 --- a/docs/assets/panel-redesign/panel/src/users.html +++ b/docs/assets/panel-redesign/panel/src/users.html @@ -11,7 +11,7 @@
    User acme-ops created.
    -
    01

    Panel users

    3 users
    +
    01

    Panel users

    3 users
    Queue idArrived, UTCFromToLast reply
    diff --git a/docs/assets/panel-redesign/panel/user.html b/docs/assets/panel-redesign/panel/user.html index 84fc665..e0bc9df 100644 --- a/docs/assets/panel-redesign/panel/user.html +++ b/docs/assets/panel-redesign/panel/user.html @@ -78,7 +78,7 @@
    -
    01

    Account

    +
    01

    Account

    diff --git a/docs/assets/panel-redesign/panel/users.html b/docs/assets/panel-redesign/panel/users.html index 728e870..b66c3cf 100644 --- a/docs/assets/panel-redesign/panel/users.html +++ b/docs/assets/panel-redesign/panel/users.html @@ -77,7 +77,7 @@
    User acme-ops created.
    -
    01

    Panel users

    3 users
    +
    01

    Panel users

    3 users
    UsernameE-mailRoleOutbound domainsInbound domains
    UsernameE-mailRoleOutbound domainsInbound domains