stalwart-mail
Alpha
WARNING
We stop working on this Helm-Chart. There are still many breaking change like:
We hope that stalward mail-server becomes more stable.
Usage
Helm must be installed and setup to your kubernetes cluster to use the charts. Refer to Helm’s documentation to get started. Once Helm has been set up correctly, fetch the charts as follows:
helm pull oci://codeberg.org/wrenix/helm-charts/stalwart-mail
You can install a chart release using the following command:
helm install stalwart-mail-release oci://codeberg.org/wrenix/helm-charts/stalwart-mail --values values.yaml
To uninstall a chart release use `helm’s delete command:
helm uninstall stalwart-mail-release
Values
Key | Type | Default | Description |
---|---|---|---|
affinity |
object |
|
|
autoscaling.enabled |
bool |
|
|
autoscaling.maxReplicas |
int |
|
|
autoscaling.minReplicas |
int |
|
|
autoscaling.targetCPUUtilizationPercentage |
int |
|
|
certificate.certmanager.dnsNames[0] |
string |
|
|
certificate.certmanager.enabled |
bool |
|
|
certificate.certmanager.issuerRef.group |
string |
|
|
certificate.certmanager.issuerRef.kind |
string |
|
|
certificate.certmanager.issuerRef.name |
string |
|
|
certificate.secretName |
string |
|
not needed if certmanager is used |
config.acme.letsencrypt |
object |
|
acme with name letsencrypt (from: common/tls.toml) |
config.acme.letsencrypt.cache |
string |
|
acme cache (from: common/tls.toml) |
config.acme.letsencrypt.contact |
list |
|
acme contact (from: common/tls.toml) |
config.acme.letsencrypt.directory |
string |
|
acme directory (from: common/tls.toml) |
config.acme.letsencrypt.port |
int |
|
acme port (from: common/tls.toml) |
config.acme.letsencrypt.renew-before |
string |
|
acme renew-before (from: common/tls.toml) |
config.certificate.default |
object |
|
certificate with name default (from: common/tls.toml) |
config.certificate.default.cert |
string |
|
certificate cert (from: common/tls.toml) |
config.certificate.default.private-key |
string |
|
certificate private-key (from: common/tls.toml) |
config.directory.memory |
object |
|
directory - with name memory (from: directory/internal.yaml) |
config.directory.memory.disable |
bool |
|
overwrite me, if not wanted |
config.global.shared-map.capacity |
int |
|
global shared-map capacity (from: common/server.toml) |
config.global.shared-map.shard |
int |
|
global shared-map shard (from: common/server.toml) |
config.global.thread-pool |
string |
|
global thead-pool (from: common/server.toml) |
config.global.tracing |
object |
|
global tracing (from: common/tracing.toml) |
config.imap.auth.allow-plain-text |
bool |
|
imap auth allow-plain-text (from: imap/settings.toml) |
config.imap.auth.max-failures |
int |
|
imap auth max-failures(from: imap/settings.toml) |
config.imap.folders.name.shared |
string |
|
imap folders name shared (from: imap/settings.toml) |
config.imap.protocol.uidplus |
bool |
|
imap protocol uidplus (from: imap/settings.toml) |
config.imap.rate-limit.concurrent |
int |
|
imap rate-limit concurrent (from: imap/settings.toml) |
config.imap.rate-limit.requests |
string |
|
imap rate-limit requests (from: imap/settings.toml) |
config.imap.request.max-size |
int |
|
imap request max-size (from: imap/settings.toml) |
config.imap.timeout.anonymous |
string |
|
imap timeout anonymous (from: imap/settings.toml) |
config.imap.timeout.authenticated |
string |
|
imap timeout authenticated (from: imap/settings.toml) |
config.imap.timeout.idle |
string |
|
imap timeout idle (from: imap/settings.toml) |
config.jmap.directory |
string |
|
jmap-directory (from: jmap/auth.yaml) |
config.jmap.email |
object |
|
jmap-email |
config.jmap.event-source |
object |
|
jmap-event-source |
config.jmap.mailbox |
object |
|
jmap-mailbox |
config.jmap.principal |
object |
|
jmap-principal |
config.jmap.protocol |
object |
|
jmap-protocol (from: jmap/protocol.yaml) |
config.jmap.push |
object |
|
jmap-push (from: jmap/push.yaml) |
config.jmap.rate-limit |
object |
|
jmap-rate-limit (from: jmap/ratelimit.yaml) |
config.jmap.session |
object |
|
jmap-session (from: jmap/auth.yaml) |
config.jmap.web-sockets |
object |
|
jmap-web-sockets (from: jmap/websocket.yaml) |
config.macros |
object |
|
macros (from: config.toml) |
config.oauth.auth |
object |
|
oauth - auth |
config.oauth.cache |
object |
|
oauth - cache |
config.oauth.expiry |
object |
|
oauth - expiry |
config.oauth.key |
string |
|
oauth - key |
config.queue.hash |
int |
|
queue-hash |
config.queue.outbound |
object |
|
queue-outbound |
config.queue.path |
string |
|
queue-path |
config.queue.quota[0].key |
string |
|
|
config.queue.quota[0].match |
string |
|
|
config.queue.quota[0].messages |
int |
|
|
config.queue.quota[0].size |
int |
|
|
config.queue.schedule |
object |
|
queue-schedule |
config.queue.throttle[0].concurrency |
int |
|
|
config.queue.throttle[0].key[0] |
string |
|
|
config.queue.throttle[0].rate |
string |
|
|
config.report.analysis |
object |
|
report-analysis |
config.report.dkim |
object |
|
report-dkim |
config.report.dmarc |
object |
|
report-dmarc |
config.report.dmarc.aggregate.max-size |
int |
|
default: 25 mb |
config.report.dsn |
object |
|
report-dsn |
config.report.hash |
int |
|
report-hash |
config.report.path |
string |
|
report-path |
config.report.spf |
object |
|
report-spf |
config.report.tls |
object |
|
report-tls |
config.report.tls.aggregate.max-size |
int |
|
default: 25 mb |
config.resolver.attempts |
int |
|
resolver-attempts |
config.resolver.cache |
object |
|
resolver-cache |
config.resolver.concurrency |
int |
|
resolver-concurrency |
config.resolver.preserve-intermediates |
bool |
|
resolver-preserve-intermediates |
config.resolver.public-suffix |
list |
|
resolver-public-suffix |
config.resolver.timeout |
string |
|
resolver-timeout |
config.resolver.try-tcp-on-error |
bool |
|
resolver-try-tcp-on-error |
config.resolver.type |
string |
|
resolver-type |
config.server.hostname |
string |
|
server hostname (from: common/server.toml) |
config.server.listener |
object |
|
server listener |
config.server.listener.http |
object |
|
jmap/listener.yaml |
config.server.listener.imap |
object |
|
server listener with name imap (from: imap/listener.toml) |
config.server.listener.imaps |
object |
|
server listener with name imaps (from: imap/listener.toml) |
config.server.listener.sieve |
object |
|
server listener with name sieve (from: imap/listener.toml) |
config.server.run-as.group |
string |
|
server run-as group (from: common/server.toml) |
config.server.run-as.user |
string |
|
server run-as user (from: common/server.toml) |
config.server.security.blocked-networks |
object |
|
server security blocked-networks (from: common/server.toml) |
config.server.security.fail2ban |
string |
|
server security fail2ban (from: common/server.toml) |
config.server.socket.backlog |
int |
|
server socket backlog (from: common/server.toml) |
config.server.socket.linger |
int |
|
server socket linger (from: common/server.toml) |
config.server.socket.nodelay |
bool |
|
server socket nodelay (from: common/server.toml) |
config.server.socket.recv-buffer-size |
int |
|
server socket recv-buffer-size (from: common/server.toml) |
config.server.socket.reuse-addr |
bool |
|
server socket reuse-addr (from: common/server.toml) |
config.server.socket.reuse-port |
bool |
|
server socket reuse-port (from: common/server.toml) |
config.server.socket.send-buffer-size |
int |
|
server socket send-buffer-size (from: common/server.toml) |
config.server.socket.tos |
int |
|
server socket tos (from: common/server.toml) |
config.server.socket.ttl |
int |
|
server socket ttl (from: common/server.toml) |
config.server.tls.acme |
string |
|
server tls acme (from: common/tls.toml) example: "letsencrypt" |
config.server.tls.certificate |
string |
|
server tls certificate (from: common/tls.toml) |
config.server.tls.ciphers |
string |
|
server tls #ciphers (from: common/tls.toml) example: [ "TLS13_AES_256_GCM_SHA384", "TLS13_AES_128_GCM_SHA256", "TLS13_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"] |
config.server.tls.enable |
bool |
|
server tls enable (from: common/tls.toml) |
config.server.tls.ignore-client-order |
bool |
|
server tls ignore-client-order (from: common/tls.toml) |
config.server.tls.implicit |
bool |
|
server tls implicit (from: common/tls.toml) |
config.server.tls.protocols |
string |
|
server tls protocols (from: common/tls.toml) example: ["TLSv1.2", "TLSv1.3"] |
config.server.tls.sni |
string |
|
server tls sni (from: common/tls.toml) example: [{subject: "", certificate: ""}] |
config.server.tls.timeout |
string |
|
server tls timeout (from: common/tls.toml) |
config.sieve.trusted.from-addr |
string |
|
sieve trusted from-addr (from: common/sieve.toml) |
config.sieve.trusted.from-name |
string |
|
sieve trusted from-name (from: common/sieve.toml) |
config.sieve.trusted.hostname |
string |
|
sieve trusted hostname (from: common/sieve.toml) |
config.sieve.trusted.limits.cpu |
int |
|
sieve trusted limits cpu (from: common/sieve.toml) |
config.sieve.trusted.limits.duplicate-expiry |
string |
|
sieve trusted limits duplicate-expiry (from: common/sieve.toml) |
config.sieve.trusted.limits.nested-includes |
int |
|
sieve trusted limits nested-includes (from: common/sieve.toml) |
config.sieve.trusted.limits.out-messages |
int |
|
sieve trusted limits out-messages (from: common/sieve.toml) |
config.sieve.trusted.limits.received-headers |
int |
|
sieve trusted limits received-headers (from: common/sieve.toml) |
config.sieve.trusted.limits.redirects |
int |
|
sieve trusted limits redirects (from: common/sieve.toml) |
config.sieve.trusted.no-capability-check |
bool |
|
sieve trusted no-capability-check (from: common/sieve.toml) |
config.sieve.trusted.return-path |
string |
|
sieve trusted return-path (from: common/sieve.toml) |
config.sieve.trusted.scripts.connect |
string |
|
sieve trusted scripts connect (from: common/sieve.toml) |
config.sieve.trusted.scripts.ehlo |
string |
|
sieve trusted scripts ehlo (from: common/sieve.toml) |
config.sieve.trusted.scripts.mail |
string |
|
sieve trusted scripts mail (from: common/sieve.toml) |
config.sieve.trusted.sign |
list |
|
sieve trusted sign (from: common/sieve.toml) |
config.sieve.untrusted.default-expiry.duplicate |
string |
|
sieve untrusted default-expiry duplicate (from: common/sieve.toml) |
config.sieve.untrusted.default-expiry.vacation |
string |
|
sieve untrusted default-expiry vacation (from: common/sieve.toml) |
config.sieve.untrusted.disable-capabilities |
list |
|
sieve untrusted disable-capabilities (from: common/sieve.toml) |
config.sieve.untrusted.limits.cpu |
int |
|
sieve untrusted limit cpu (from: common/sieve.toml) |
config.sieve.untrusted.limits.header-size |
int |
|
sieve untrusted limit header-size (from: common/sieve.toml) |
config.sieve.untrusted.limits.includes |
int |
|
sieve untrusted limit includes (from: common/sieve.toml) |
config.sieve.untrusted.limits.local-variables |
int |
|
sieve untrusted limit local-variables (from: common/sieve.toml) |
config.sieve.untrusted.limits.match-variables |
int |
|
sieve untrusted limit match-variables (from: common/sieve.toml) |
config.sieve.untrusted.limits.max-scripts |
int |
|
sieve untrusted limit max-scripts (from: common/sieve.toml) |
config.sieve.untrusted.limits.name-length |
int |
|
sieve untrusted limit name-length (from: common/sieve.toml) |
config.sieve.untrusted.limits.nested-blocks |
int |
|
sieve untrusted limit nested-blocks (from: common/sieve.toml) |
config.sieve.untrusted.limits.nested-foreverypart |
int |
|
sieve untrusted limit nested-foreverypart (from: common/sieve.toml) |
config.sieve.untrusted.limits.nested-includes |
int |
|
sieve untrusted limit nested-includes (from: common/sieve.toml) |
config.sieve.untrusted.limits.nested-tests |
int |
|
sieve untrusted limit nested-tests (from: common/sieve.toml) |
config.sieve.untrusted.limits.outgoing-messages |
int |
|
sieve untrusted limit outgoing-messages (from: common/sieve.toml) |
config.sieve.untrusted.limits.received-headers |
int |
|
sieve untrusted limit received-headers (from: common/sieve.toml) |
config.sieve.untrusted.limits.redirects |
int |
|
sieve untrusted limit redirects (from: common/sieve.toml) |
config.sieve.untrusted.limits.script-size |
int |
|
sieve untrusted limit script-size (from: common/sieve.toml) |
config.sieve.untrusted.limits.string-length |
int |
|
sieve untrusted limit string-length (from: common/sieve.toml) |
config.sieve.untrusted.limits.variable-name-length |
int |
|
sieve untrusted limit variable-name-length (from: common/sieve.toml) |
config.sieve.untrusted.limits.variable-size |
int |
|
sieve untrusted limit variable-size (from: common/sieve.toml) |
config.sieve.untrusted.notification-uris |
list |
|
sieve untrusted notification-uris (from: common/sieve.toml) |
config.sieve.untrusted.protected-headers |
list |
|
sieve untrusted protected-headers (from: common/sieve.toml) |
config.sieve.untrusted.vacation.default-subject |
string |
|
sieve untrusted vacation default-subject (from: common/sieve.toml) |
config.sieve.untrusted.vacation.subject-prefix |
string |
|
sieve untrusted vacation subject-prefix (from: common/sieve.toml) |
config.signature.rsa |
object |
|
signature-rsa |
config.storage.blob |
string |
|
storage blob (from: common/store.toml) |
config.storage.cluster.node-id |
string |
|
storage - cluster - node-id (from: common/store.toml) |
config.storage.data |
string |
|
storage data (from: common/store.toml) |
config.storage.directory |
string |
|
storage directory (from: common/store.toml) |
config.storage.encryption.append |
bool |
|
storage encryption append (from: common/store.toml) |
config.storage.encryption.enable |
bool |
|
storage encryption enable (from: common/store.toml) |
config.storage.fts |
string |
|
storage fts (from: common/store.toml) BROKEN / TODO see: https://github.com/stalwartlabs/mail-server/issues/211 |
config.storage.fts-table-duplicated-workaround.default-language |
string |
|
storage - fts - default-language (from: common/store.toml) |
config.storage.lookup |
string |
|
storage lookup (from: common/store.toml) |
config.storage.spam.header |
string |
|
storage spam header (from: common/store.toml) |
config.store.fs |
object |
|
store - with name fs |
config.store.fs.disable |
bool |
|
overwrite me, if not wanted |
config.store.sqlite |
object |
`{"disable":false,"path":"/data/index.sqlite3","purge":{"frequency":"0 3 *"},"query":{"domains":"SELECT 1 FROM emails WHERE address LIKE '%@' |
|
? LIMIT 1","emails":"SELECT address FROM emails WHERE name = ? AND type != 'list' ORDER BY type DESC, address ASC","expand":"SELECT p.address FROM emails AS p JOIN emails AS l ON p.name = l.name WHERE p.type = 'primary' AND l.address = ? AND l.type = 'list' ORDER BY p.address LIMIT 50","members":"SELECT member_of FROM group_members WHERE name = ?","name":"SELECT name, type, secret, description, quota FROM accounts WHERE name = ? AND active = true","recipients":"SELECT name FROM emails WHERE address = ?","verify":"SELECT address FROM emails WHERE address LIKE '%' |
? |
||
'%' AND type = 'primary' ORDER BY address LIMIT 5"},"type":"sqlite"}` |
store - with name sqlite |
config.store.sqlite.disable |
bool |
|
overwrite me, if not wanted |
fullnameOverride |
string |
|
global.image.pullPolicy |
string |
|
|
if set it will overwrite all pullPolicy |
global.image.registry |
string |
|
if set it will overwrite all registry entries |
image.pullPolicy |
string |
|
image.registry |
string |
|
|
image.repository |
string |
|
|
image.tag |
string |
|
|
Overrides the image tag whose default is the chart appVersion. |
imagePullSecrets |
list |
|
ingress.annotations |
object |
|
|
ingress.className |
string |
|
|
ingress.enabled |
bool |
|
|
ingress.hosts[0].host |
string |
|
|
ingress.hosts[0].paths[0].path |
string |
|
|
ingress.hosts[0].paths[0].pathType |
string |
|
|
ingress.tls |
list |
|
|
nameOverride |
string |
|
|
nodeSelector |
object |
|
|
persistence.accessMode |
string |
|
|
accessMode |
persistence.annotations |
object |
|
persistence.enabled |
bool |
|
|
Enable persistence using Persistent Volume Claims ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ |
persistence.existingClaim |
string |
|
A manually managed Persistent Volume and Claim Requires persistence.enabled: true If defined, PVC must be created manually before volume will be bound |
persistence.hostPath |
string |
|
Do not create an PVC, direct use hostPath in Pod |
persistence.size |
string |
|
size |
persistence.storageClass |
string |
|
Persistent Volume Storage Class If defined, storageClassName: <storageClass> If set to "-", storageClassName: "", which disables dynamic provisioning If undefined (the default) or set to null, no storageClassName spec is set, choosing the default provisioner. (gp2 on AWS, standard on GKE, AWS & OpenStack) |
podAnnotations |
object |
|
podLabels |
object |
|
|
podSecurityContext |
object |
|
|
replicaCount |
int |
|
|
resources |
object |
|
|
securityContext |
object |
|
|
service.annotations |
object |
|
|
service.ipFamilies[0] |
string |
|
|
service.ipFamilyPolicy |
string |
|
|
other option is RequireDualStack |
service.ports.http |
int |
|
service.ports.imap |
int |
|
|
service.ports.imaps |
int |
|
|
service.ports.sieve |
int |
|
|
service.ports.smtp |
int |
|
|
service.ports.smtp-submission |
int |
|
|
service.ports.smtps |
int |
|
|
service.type |
string |
|
|
serviceAccount.annotations |
object |
|
|
serviceAccount.automount |
bool |
|
|
serviceAccount.create |
bool |
|
|
serviceAccount.name |
string |
|
|
tolerations |
list |
|
|
traefik.enabled |
bool |
|
|
traefik.ports.http |
string |
|
|
traefik.ports.imaps |
string |
|
|
traefik.ports.smtps |
string |
|
|
volumeMounts |
list |
|
|
volumes |
list |
Autogenerated from chart metadata using helm-docs