Overview
Mail traffic (14 days)
Privacy-safe: only counts and sizes by local mailbox — no subjects or bodies. Open statistics · Traffic list
{% if traffic_chart_svg %}No traffic chart yet. Stats are collected from Postfix logs every few minutes.
{% endif %} {% if mail_summary and mail_summary.today %}System Status
Recent queue items
{% if recent_queue %}| Queue ID | Sender | Recipients |
|---|---|---|
| {{ item.queue_id }} | {{ item.sender }} |
{% for rcpt in item.recipients or [] %}
{{ rcpt.address }}
{% endfor %}
|
Queue is currently empty.
{% endif %}Recent backups
{% if recent_backups %}| Name | Path |
|---|---|
| {{ item.name }} | {{ item.path }} |
No local backup runs found yet.
{% endif %}Mail traffic
Only local mailbox, direction, size and time — no subjects, bodies or remote addresses.
| When | Direction | Mailbox | Size |
|---|---|---|---|
| {{ item.event_at }} | {{ 'Received' if item.direction == 'inbound' else 'Sent' }} | {{ item.mailbox }} |
{{ item.size_human }} ({{ item.size_bytes }} B) |
| No traffic events yet. Wait for the collector timer or open Statistics and click “Collect now”. | |||
Statistics
{{ mail_summary.privacy_note if mail_summary else 'Privacy-safe traffic statistics.' }} Retention: {{ mail_summary.retention_days if mail_summary else '—' }} days.
{% if mail_summary %}Daily chart ({{ stats_days }} days)
{% if traffic_chart_svg %}{{ traffic_chart_svg|safe }}{% else %}No data
{% endif %}By day
| Day | In | Out | In bytes | Out bytes |
|---|---|---|---|---|
| {{ row.day }} | {{ row.inbound_count }} | {{ row.outbound_count }} | {{ row.inbound_bytes }} | {{ row.outbound_bytes }} |
| No daily data yet. | ||||
By mailbox ({{ stats_days }} days)
| Mailbox | In | Out | In bytes | Out bytes |
|---|---|---|---|---|
{{ row.mailbox }} |
{{ row.inbound_count }} | {{ row.outbound_count }} | {{ row.inbound_bytes }} | {{ row.outbound_bytes }} |
| No per-mailbox data yet. | ||||
Domains
Add domain| Domain | Accounts | Aliases | Redirects | Status | Open |
|---|---|---|---|---|---|
| {{ domain.name }} | {{ domain.account_count }} | {{ domain.alias_count }} | {{ domain.redirect_count }} | {{ 'active' if domain.is_active else 'inactive' }} | Manage |
Create your first domain to manage accounts, aliases, redirects and DKIM.
{% endif %}Create domain
Close{{ selected_domain.name }}
Domain settings
DKIM rotation
Active selector: {{ selected_domain.dkim_selector or 'none' }}
{% if selected_domain.dkim_rotated_at %} · last rotation {{ selected_domain.dkim_rotated_at }}{% endif %}
Previous selector kept for overlap: {{ selected_domain.dkim_previous_selector }}
{% if selected_domain.dkim_previous_expires_at %} until {{ selected_domain.dkim_previous_expires_at }}{% endif %}
Private key path: {{ selected_domain.dkim_private_path or 'not generated yet' }}
{{ selected_domain.dkim_public_key or 'Generate DKIM to populate the public record.' }}
DNS provider (Cloudflare)
Last sync: {{ selected_domain.dns_last_sync_status or 'never' }}
Accounts
Add account| Storage quota | Send limits (0=global) | Effective send | Password | Status | Suspend / restore | Delete | |
|---|---|---|---|---|---|---|---|
| {{ account.email }} | {{ account.effective_send_rate_per_hour or 0 }}/h · {{ account.effective_send_rate_per_day or 0 }}/d · {{ account.effective_send_rate_per_month or 0 }}/mo | {{ 'Active' if account.is_active else 'Suspended' }} |
Aliases
Add alias| Alias | Destination | Active | Actions |
|---|---|---|---|
| {{ alias.source }} | {{ alias.destination }} | {{ 'yes' if alias.is_active else 'no' }} |
Redirects
Add redirect| Redirect | Target | Active | Actions |
|---|---|---|---|
| {{ redirect.source }} | {{ redirect.target_email }} | {{ 'yes' if redirect.is_active else 'no' }} |
Suggested DNS records
{{ key }}
{{ value }}
{% endfor %}
Mail Queue
{% if queue %}| Queue ID | Queue | Sender | Recipients | Reason | Actions |
|---|---|---|---|---|---|
| {{ item.queue_id }} | {{ item.display_state or '—' }} | {{ item.sender }} |
{% for rcpt in item.recipients or [] %}
{{ rcpt.address }}
{% endfor %}
|
{{ item.display_reason or '—' }} | {% for action in ['hold', 'release', 'requeue', 'delete'] %} {% endfor %} |
Queue is empty.
{% endif %}Mailbox import
Transfer every folder and message (including Sent) from a remote IMAP server into a local Limristem mailbox. Jobs run in a dedicated queue.
Source IMAP credentials
Choose the local destination account, then enter the remote mailbox credentials. Use Test connection before queuing a full import.
{% if not import_accounts %}Create at least one local account before importing mail.
{% else %} {% endif %}Import jobs
Live progress refreshes every 2 seconds while jobs are pending or running.
| ID | Status | Destination | Source | Progress | Transferred | Speed | ETA | Folder | Actions |
|---|---|---|---|---|---|---|---|---|---|
| {{ job.id }} | {{ job.status }} | {{ job.destination_username }} | {{ job.source_username }} |
|
{{ job.bytes_done_human }} | {{ job.speed_human }} | {{ job.eta_human or '—' }} | {{ job.current_folder or '—' }} {% if job.status_message %}{% endif %} {% if job.last_error %}{% endif %} | {% if job.status in ['pending', 'running'] %} {% endif %} {% if job.status not in ['running'] %} {% endif %} |
No import jobs yet. Start one from the New import tab.
{% endif %}Backups
{{ 'Edit schedule' if selected_backup_schedule.get('id') else 'Create schedule' }}
Backup schedules
Create new schedule| Name | Schedule | Storage | DB | Redis | Compression | Status | Actions |
|---|---|---|---|---|---|---|---|
| {{ item.name }} | {{ item.cron_expression }} |
{{ item.storage_id or 'Local only' }} | {{ item.include_database }} | {{ item.include_redis }} | {{ item.compression }} | {{ item.enabled }} | Edit |
{{ 'Edit storage' if selected_backup_storage.get('id') else 'Create storage' }}
Backup storages
Create new storage| Name | Type | Target | Encryption | Actions |
|---|---|---|---|---|
| {{ item.name }} | {{ item.type }} | {{ item.bucket or item.host or item.path or 'local' }} | {{ item.encrypt }} | Edit |
Available local backup runs
{% if backup_runs %}| Name | Path | Metadata |
|---|---|---|
| {{ item.name }} | {{ item.path }} |
{{ item.metadata or 'n/a' }} |
No local backups found.
{% endif %}Global backup settings
Admin MFA (panel + API)
TOTP and/or SMS OTP protect the web panel and the management API.
SMTP/IMAP/POP cannot do interactive OTP mid-session — for mailboxes use
app passwords (API /accounts/{id}/app-passwords) and optionally
require_app_password.
TOTP (authenticator app)
Status: {% if mfa_status and mfa_status.totp_enabled %}enabled {% elif mfa_status and mfa_status.totp_pending %}pending confirmation {% else %}disabled{% endif %}
{% if totp_enroll %}Secret (store offline / scan with authenticator):
{{ totp_enroll.secret }}
URI: {{ totp_enroll.provisioning_uri }}
{% else %} {% if mfa_status and (mfa_status.totp_enabled or mfa_status.totp_pending) %} {% endif %} {% endif %}SMS OTP
Status: {% if mfa_status and mfa_status.sms_enabled %}enabled ({{ mfa_status.sms_phone_masked }}) {% else %}disabled{% endif %}
SMS providers
Headers: X-Client-Id, X-Client-Secret, X-Api-Key (Crilide API style).
Banned IPs
| Created | IP | Reason | Source | Services | Action |
|---|---|---|---|---|---|
| {{ item.created_at or '—' }} | {{ item.ip }} | {{ item.reason }} | {{ item.source or 'manual' }} | {{ item.services or item.jail or '—' }} | |
| No banned IPs found. | |||||
Firewall
Operations
Deliverability, outbound IP reputation self-checks, connectivity probes, inbound DNSBL helpers.
Deliverability check
End-to-end connectivity
TCP + TLS probes to SMTP/IMAP/HTTPS (no mailbox password required).
Inbound DNSBL (Rspamd)
{{ rbl_config.warning }}
Last result
{{ operations_result }}
Recent IP reputation checks
| When | IP | Source | Listed | Detail |
|---|---|---|---|---|
| {{ row.checked_at }} | {{ row.entity_value }} |
{{ row.source }} | {{ 'yes' if row.listed else 'no' }} | {{ row.detail or '' }} |
Topology wizard
How this instance is deployed: Standalone, Routed Mesh, or Storage Cluster.
{{ topology.local_server_id }}Choose deployment mode
{% if internode_token_once %}{{ internode_token_once }}
Registered servers
| ID | Name | Hostname | SMTP | Role | Local | Active |
|---|---|---|---|---|---|---|
{{ s.server_id }} |
{{ s.display_name }} | {{ s.hostname }} | {{ s.smtp_host }}:{{ s.smtp_port }} | {{ s.role }} | {{ 'yes' if s.is_local else 'no' }} | {{ 'yes' if s.is_active else 'no' }} |
| No peers registered (standalone or not yet joined). | ||||||
Logs
{{ log_content }}
Settings
General settings
{% if settings_info.get('panel_favicon_path') %} {% endif %}Version and updates
| Hostname | {{ settings_info.get('hostname', hostname) }} |
| Update channel | {{ settings_info.get('update_channel', 'stable') }} |
| Check endpoint | {{ settings_info.get('update_check_url') or (settings_info.get('update_status') or {}).get('endpoint', '—') }} |
| Current version | {{ settings_info.get('current_version', 'unknown') }} |
| Latest version | {{ (settings_info.get('update_status') or {}).get('latest_version', 'not checked yet') }} |
| Update available | {{ 'yes' if (settings_info.get('update_status') or {}).get('update_available') else 'no' }} |
Shared TLS certificate
| Status | {{ ssl_info.get('status', 'unknown') }} |
| Mode | {{ ssl_info.get('mode', 'unknown') }} |
| Hostname | {{ ssl_info.get('hostname', hostname) }} |
| Certificate path | {{ ssl_info.get('cert_path', 'N/A') }} |
| Key path | {{ ssl_info.get('key_path', 'N/A') }} |
| Subject | {{ ssl_info['cert_info'].get('subject', 'N/A') }} |
| Issuer | {{ ssl_info['cert_info'].get('issuer', 'N/A') }} |
| Valid From | {{ ssl_info['cert_info'].get('not_valid_before', 'N/A') }} |
| Valid To | {{ ssl_info['cert_info'].get('not_valid_after', 'N/A') }} |
The same certificate is reused for Postfix, Dovecot, and the HTTPS endpoints served by Nginx.
{% else %}Notice: Postfix and/or Dovecot are using different certificates!
| Postfix Cert Path | {{ ssl_info.get('postfix_cert_path', 'N/A') }} |
| Postfix Cert Subject | {{ ssl_info['postfix_cert_info'].get('subject', 'N/A') }} |
| Dovecot Cert Path | {{ ssl_info.get('dovecot_cert_path', 'N/A') }} |
| Dovecot Cert Subject | {{ ssl_info['dovecot_cert_info'].get('subject', 'N/A') }} |
SSL actions
Service limits
API Credentials
| Admin user | {{ api_info.get('api_admin_user', 'N/A') }} |
| Endpoint | {{ api_info.get('api_endpoint', 'N/A') }} |
| Hostname | {{ api_info.get('hostname', 'N/A') }} |
API Usage
Authenticate using HTTP Basic Auth with your API admin credentials.
Example requests
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}health
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}domains
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}accounts
Service limits & anti-spam
Auth lockouts, max message size, SMTP rates, and per-user authenticated send quotas (Rspamd).
API Credentials
| Admin user | {{ api_info.get('api_admin_user', 'N/A') }} |
| API endpoint | {{ api_info.get('api_endpoint', 'N/A') }} |
| Hostname | {{ api_info.get('hostname', 'N/A') }} |
{{ generated_api_password }}
Save this password now — it will not be shown again. Only the hash is stored.
API Usage
Authenticate using HTTP Basic Auth with your API admin credentials.
Example requests
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}health
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}domains
curl -u <user>:<pass> {{ api_info.get('api_endpoint', '') }}accounts
Available endpoints
| Method | Path | Description |
|---|---|---|
| GET | /health | Health check (public) |
| GET | /health/details | Detailed health (admin) |
| GET/POST | /domains | List / create domains |
| GET/POST | /accounts | List / create accounts |
| GET/POST | /aliases | List / create aliases |
| GET/POST | /redirects | List / create redirects |
| GET/POST | /reputation | List / create reputation records |
| GET | /admin/queue | Mail queue management |
| GET | /admin/bans | IP ban management |
| GET/PATCH | /admin/limits | Service limits |
| GET/PATCH | /admin/backups | Backup configuration |
| GET | /admin/ssl | Shared TLS certificate status |
| POST | /admin/ssl/selfsigned | Generate a self-signed certificate |
| POST | /admin/ssl/letsencrypt | Request a Let's Encrypt certificate |
| POST | /admin/ssl/manual | Upload a manual PEM certificate and key |