openvibers/openvibe.mail .env.example
.env.example
| 1 | # OpenVibe.Mail — environment (production: /etc/openvibe/mail.env). Names only; never commit values. |
| 2 | |
| 3 | NODE_ENV=production |
| 4 | PORT=5250 |
| 5 | HOST=127.0.0.1 |
| 6 | BASE_URL=https://openvibe.email |
| 7 | TRUST_PROXY=2 |
| 8 | |
| 9 | # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh: the runtime role through PgBouncer, |
| 10 | # the owner on a direct connection (migrations), and Valkey (per-address rate counters). |
| 11 | # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. |
| 12 | DATABASE_URL= |
| 13 | DATABASE_DIRECT_URL= |
| 14 | VALKEY_URL= |
| 15 | VALKEY_PREFIX=ov:mail: |
| 16 | #MAIL_PGLITE_DIR=./data/pglite |
| 17 | |
| 18 | # OpenVibe.Network: the person's token is verified offline against the JWKS; a typed token (a `typ` or `purpose` |
| 19 | # claim) is not a person's session and is refused. |
| 20 | OV_NETWORK_URL=https://openvibe.network |
| 21 | OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 |
| 22 | # OV_NETWORK_ISSUER=https://openvibe.network |
| 23 | # OV_SESSION_AUDIENCE=openvibe.network |
| 24 | # MAIL_AUDIENCE=openvibe.mail |
| 25 | |
| 26 | # Sign-in on openvibe.email (openvibe-sdk/sso, OAuth2 + PKCE). The client must be registered in the Network with |
| 27 | # redirect https://openvibe.email/auth/callback. COOKIE_SECURE defaults to true in production. |
| 28 | OV_OAUTH_CLIENT_ID=mail |
| 29 | OV_OAUTH_CLIENT_SECRET= |
| 30 | # OV_OAUTH_REDIRECT_URI=https://openvibe.email/auth/callback |
| 31 | # OV_OAUTH_SCOPE=profile |
| 32 | # COOKIE_SECURE=true |
| 33 | |
| 34 | # The addresses. Masks live on their own domain, burners rotate over the subdomains below, and an agent's inbox is |
| 35 | # <agent>.<user>@<base domain>. A new burner domain needs no code: add it here and restart. |
| 36 | MAIL_BASE_DOMAIN=openvibe.email |
| 37 | MAIL_MASK_DOMAIN=mask.openvibe.email |
| 38 | BURNER_DOMAINS=burn1.openvibe.email,burn2.openvibe.email,burn3.openvibe.email |
| 39 | |
| 40 | # Stalwart (the mail server itself), reached over loopback only. The admin credential is used for the management |
| 41 | # API (domains, cache invalidation) and to read a person's mailbox over JMAP. |
| 42 | STALWART_URL=http://127.0.0.1:8080 |
| 43 | STALWART_ADMIN_USER=admin |
| 44 | STALWART_ADMIN_PASSWORD= |
| 45 | |
| 46 | # Stalwart's own settings (deploy/stalwart/config.toml reads the same names). |
| 47 | STALWART_DB_HOST=127.0.0.1 |
| 48 | STALWART_DB_PORT=5432 |
| 49 | STALWART_DB_NAME=ov_mail |
| 50 | STALWART_DB_USER= |
| 51 | STALWART_DB_PASSWORD= |
| 52 | |
| 53 | # Blobs: local disk by default (M1). STALWART_BLOB_STORE=s3 turns on the B2/MinIO path below; with fs only |
| 54 | # STALWART_BLOB_PATH and STALWART_BLOB_DEPTH matter. The depth must not change after blobs are written. |
| 55 | STALWART_BLOB_STORE=fs |
| 56 | STALWART_BLOB_PATH=/var/lib/openvibe-stalwart/blobs |
| 57 | STALWART_BLOB_DEPTH=2 |
| 58 | STALWART_BLOB_ENDPOINT= |
| 59 | STALWART_BLOB_BUCKET= |
| 60 | STALWART_BLOB_ACCESS_KEY_ID= |
| 61 | STALWART_BLOB_SECRET_KEY= |
| 62 | STALWART_BLOB_REGION=us-east-1 |
| 63 | |
| 64 | # OpenVibe.Events: the outbox relay publishes mail.received and mail.mask.created. Unset keeps the rows in the |
| 65 | # outbox and status() says the relay is off. |
| 66 | MAIL_EVENTS_URL= |
| 67 | MAIL_EVENTS_CLIENT_ID=mail |
| 68 | MAIL_EVENTS_CLIENT_SECRET= |
| 69 | #MAIL_EVENTS_INTERVAL_MS=5000 |
| 70 | |
| 71 | # Caps (server/domain/limits.js). |
| 72 | #MAIL_MAX_MASKS=20 |
| 73 | #MAIL_MAX_LIVE_BURNERS=5 |
| 74 | # A global ceiling on anonymous burners alive at once: 503 mail.burner_capacity past it. |
| 75 | #MAIL_MAX_LIVE_ANON_BURNERS=2000 |
| 76 | # Per IP: ten anonymous burners an hour, each living at most ten minutes. |
| 77 | #MAIL_BURNERS_PER_IP_HOUR=10 |
| 78 | #MAIL_ANON_BURNER_TTL_MINUTES=10 |
| 79 | #MAIL_API_RATE_LIMIT_PER_MIN=240 |
| 80 | #MAIL_PURGE_INTERVAL_MS=60000 |
| 81 | |
| 82 | # Sending an agent's reply (track HO6). A reply to one of our own domains (the base, the mask domain, a burner |
| 83 | # domain) is handed to the mail server over loopback SMTP below: no relay and no packet off the host. |
| 84 | # Sending to anyone else is NOT ours yet (plan M2: it waits on the owner for a separate mail IPv4, its PTR record |
| 85 | # and Workers Paid for the relay). MAIL_OUTBOUND=on is the only way on, and it is OFF unless set: with it off a |
| 86 | # reply to an outside address opens no connection at all and the agent's system turns it into the person's approval. |
| 87 | MAIL_SMTP_HOST=127.0.0.1 |
| 88 | MAIL_SMTP_PORT=25 |
| 89 | # MX target for a person's custom domain. Set to the hostname that hands inbound SMTP to this Stalwart instance. |
| 90 | # A custom domain cannot pass MX verification while this is empty. |
| 91 | #MAIL_CUSTOM_DOMAIN_MX=mail.openvibe.email |
| 92 | #MAIL_OUTBOUND=off |
| 93 | #MAIL_RELAY_HOST= |
| 94 | #MAIL_RELAY_PORT=587 |
| 95 | #MAIL_RELAY_USER= |
| 96 | #MAIL_RELAY_PASSWORD= |
| 97 | #MAIL_RELAY_SECURE=false |
| 98 | #MAIL_RELAY_STARTTLS=true |
| 99 | |
| 100 | # Answering (track HO6): the due poll that tells an agent's system about the mail at its own address, for an inbox |
| 101 | # whose switch the person turned on. |
| 102 | #MAIL_AGENT_MAIL_INTERVAL_MS=30000 |
| 103 | #MAIL_AGENT_MAIL_BATCH=50 |
| 104 | #MAIL_AGENT_MAIL_SCAN=100 |
| 105 |