├── .github ├── renovate.json └── workflows │ ├── fix_redirects.sh │ ├── gh-pages.yml │ └── renovate_check-build.yml ├── .gitignore ├── README.md ├── docs ├── assets │ ├── fonts │ │ ├── source-code-pro-v21-latin-regular.eot │ │ ├── source-code-pro-v21-latin-regular.svg │ │ ├── source-code-pro-v21-latin-regular.ttf │ │ ├── source-code-pro-v21-latin-regular.woff │ │ ├── source-code-pro-v21-latin-regular.woff2 │ │ ├── source-sans-pro-v21-latin-700.eot │ │ ├── source-sans-pro-v21-latin-700.svg │ │ ├── source-sans-pro-v21-latin-700.ttf │ │ ├── source-sans-pro-v21-latin-700.woff │ │ ├── source-sans-pro-v21-latin-700.woff2 │ │ ├── source-sans-pro-v21-latin-regular.eot │ │ ├── source-sans-pro-v21-latin-regular.svg │ │ ├── source-sans-pro-v21-latin-regular.ttf │ │ ├── source-sans-pro-v21-latin-regular.woff │ │ └── source-sans-pro-v21-latin-regular.woff2 │ ├── images │ │ ├── checkmk │ │ │ ├── long_check_output.png │ │ │ ├── no_updates_available.png │ │ │ └── updates_available.png │ │ ├── favicon.png │ │ ├── i_u_m │ │ │ └── nightly_footer.png │ │ ├── logo.svg │ │ ├── manual-guides │ │ │ ├── mailcow-bl_wl.de.png │ │ │ ├── mailcow-bl_wl.en.png │ │ │ ├── mailcow-domain_email_tags.de.png │ │ │ ├── mailcow-domain_email_tags.png │ │ │ ├── mailcow-domain_tags_ribbon.de.png │ │ │ ├── mailcow-domain_tags_ribbon.png │ │ │ ├── mailcow-forgot-password_mailbox_acl.de.png │ │ │ ├── mailcow-forgot-password_mailbox_acl.en.png │ │ │ ├── mailcow-forgot-password_mailbox_field.de.png │ │ │ ├── mailcow-forgot-password_mailbox_field.en.png │ │ │ ├── mailcow-forgot-password_server_settings.de.png │ │ │ ├── mailcow-forgot-password_server_settings.en.png │ │ │ ├── mailcow-netfilter_external_endpoint.de.png │ │ │ ├── mailcow-netfilter_external_endpoint.en.png │ │ │ ├── mailcow-netfilter_regex.de.png │ │ │ ├── mailcow-netfilter_regex.en.png │ │ │ ├── mailcow-netfilter_settings.de.png │ │ │ ├── mailcow-netfilter_settings.en.png │ │ │ ├── mailcow-spamalias.de.png │ │ │ ├── mailcow-spamalias.en.png │ │ │ ├── mailcow-spamfilter.de.png │ │ │ ├── mailcow-spamfilter.en.png │ │ │ ├── mailcow-tagging.de.png │ │ │ └── mailcow-tagging.en.png │ │ └── troubleshooting │ │ │ └── mailcow-backupmx.png │ ├── javascripts │ │ └── client.js │ └── stylesheets │ │ └── extra.css ├── backup_restore │ ├── b_n_r-accidental_deletion.de.md │ ├── b_n_r-accidental_deletion.en.md │ ├── b_n_r-backup-export.de.md │ ├── b_n_r-backup-export.en.md │ ├── b_n_r-backup.de.md │ ├── b_n_r-backup.en.md │ ├── b_n_r-backup_restore-maildir.de.md │ ├── b_n_r-backup_restore-maildir.en.md │ ├── b_n_r-backup_restore-mysql.de.md │ ├── b_n_r-backup_restore-mysql.en.md │ ├── b_n_r-coldstandby.de.md │ ├── b_n_r-coldstandby.en.md │ ├── b_n_r-restore.de.md │ └── b_n_r-restore.en.md ├── client │ ├── client-android.de.md │ ├── client-android.en.md │ ├── client-apple.de.md │ ├── client-apple.en.md │ ├── client-emclient.de.md │ ├── client-emclient.en.md │ ├── client-kontact.de.md │ ├── client-kontact.en.md │ ├── client-manual.de.md │ ├── client-manual.en.md │ ├── client-outlook.de.md │ ├── client-outlook.en.md │ ├── client-thunderbird.de.md │ ├── client-thunderbird.en.md │ ├── client.de.md │ └── client.en.md ├── getstarted │ ├── install.de.md │ ├── install.en.md │ ├── prerequisite-dns.de.md │ ├── prerequisite-dns.en.md │ ├── prerequisite-system.de.md │ └── prerequisite-system.en.md ├── index.de.md ├── index.en.md ├── maintenance │ ├── deinstall.de.md │ ├── deinstall.en.md │ ├── migration.de.md │ ├── migration.en.md │ ├── update.de.md │ └── update.en.md ├── manual-guides │ ├── ClamAV │ │ ├── u_e-clamav-additional_dbs.de.md │ │ ├── u_e-clamav-additional_dbs.en.md │ │ ├── u_e-clamav-whitelist.de.md │ │ └── u_e-clamav-whitelist.en.md │ ├── Docker │ │ ├── u_e-docker-cust_dockerfiles.de.md │ │ └── u_e-docker-cust_dockerfiles.en.md │ ├── Dovecot │ │ ├── u_e-dovecot-any_acl.de.md │ │ ├── u_e-dovecot-any_acl.en.md │ │ ├── u_e-dovecot-catchall_vacation.de.md │ │ ├── u_e-dovecot-catchall_vacation.en.md │ │ ├── u_e-dovecot-expunge.de.md │ │ ├── u_e-dovecot-expunge.en.md │ │ ├── u_e-dovecot-extra_conf.de.md │ │ ├── u_e-dovecot-extra_conf.en.md │ │ ├── u_e-dovecot-fts.de.md │ │ ├── u_e-dovecot-fts.en.md │ │ ├── u_e-dovecot-harden_ciphers.de.md │ │ ├── u_e-dovecot-harden_ciphers.en.md │ │ ├── u_e-dovecot-idle_interval.de.md │ │ ├── u_e-dovecot-idle_interval.en.md │ │ ├── u_e-dovecot-lazy_expunge.de.md │ │ ├── u_e-dovecot-lazy_expunge.en.md │ │ ├── u_e-dovecot-mail-crypt.de.md │ │ ├── u_e-dovecot-mail-crypt.en.md │ │ ├── u_e-dovecot-more.de.md │ │ ├── u_e-dovecot-more.en.md │ │ ├── u_e-dovecot-performance.de.md │ │ ├── u_e-dovecot-performance.en.md │ │ ├── u_e-dovecot-public_folder.de.md │ │ ├── u_e-dovecot-public_folder.en.md │ │ ├── u_e-dovecot-static_master.de.md │ │ ├── u_e-dovecot-static_master.en.md │ │ ├── u_e-dovecot-vmail-volume.de.md │ │ └── u_e-dovecot-vmail-volume.en.md │ ├── Nginx │ │ ├── u_e-nginx_custom.de.md │ │ ├── u_e-nginx_custom.en.md │ │ ├── u_e-nginx_webmail-site.de.md │ │ └── u_e-nginx_webmail-site.en.md │ ├── Postfix │ │ ├── u_e-postfix-attachment_size.de.md │ │ ├── u_e-postfix-attachment_size.en.md │ │ ├── u_e-postfix-custom_transport.de.md │ │ ├── u_e-postfix-custom_transport.en.md │ │ ├── u_e-postfix-disable_sender_verification.de.md │ │ ├── u_e-postfix-disable_sender_verification.en.md │ │ ├── u_e-postfix-extra_cf.de.md │ │ ├── u_e-postfix-extra_cf.en.md │ │ ├── u_e-postfix-harden_ciphers.de.md │ │ ├── u_e-postfix-harden_ciphers.en.md │ │ ├── u_e-postfix-pflogsumm.de.md │ │ ├── u_e-postfix-pflogsumm.en.md │ │ ├── u_e-postfix-postscreen_whitelist.de.md │ │ ├── u_e-postfix-postscreen_whitelist.en.md │ │ ├── u_e-postfix-relayhost.de.md │ │ ├── u_e-postfix-relayhost.en.md │ │ ├── u_e-postfix-unauthenticated-relaying.de.md │ │ └── u_e-postfix-unauthenticated-relaying.en.md │ ├── Redis │ │ ├── u_e-redis.de.md │ │ └── u_e-redis.en.md │ ├── Rspamd │ │ ├── u-e-rspamd-add-additional-modules.de.md │ │ ├── u-e-rspamd-add-additional-modules.en.md │ │ ├── u-e-rspamd-tweaks.de.md │ │ ├── u-e-rspamd-tweaks.en.md │ │ ├── u-e-rspamd-work-with-spamdata.de.md │ │ ├── u-e-rspamd-work-with-spamdata.en.md │ │ ├── u_e-rspamd-disable-greylisting.de.md │ │ ├── u_e-rspamd-disable-greylisting.en.md │ │ ├── u_e-rspamd-general.de.md │ │ └── u_e-rspamd-general.en.md │ ├── SOGo │ │ ├── u_e-sogo.de.md │ │ └── u_e-sogo.en.md │ ├── Unbound │ │ ├── u_e-unbound-fwd.de.md │ │ └── u_e-unbound-fwd.en.md │ ├── Watchdog │ │ ├── u_e-watchdog-thresholds.de.md │ │ └── u_e-watchdog-thresholds.en.md │ ├── mailcow-UI │ │ ├── u_e-mailcow_ui-bl_wl.de.md │ │ ├── u_e-mailcow_ui-bl_wl.en.md │ │ ├── u_e-mailcow_ui-config.de.md │ │ ├── u_e-mailcow_ui-config.en.md │ │ ├── u_e-mailcow_ui-css.de.md │ │ ├── u_e-mailcow_ui-css.en.md │ │ ├── u_e-mailcow_ui-fido.de.md │ │ ├── u_e-mailcow_ui-fido.en.md │ │ ├── u_e-mailcow_ui-forgot_password.de.md │ │ ├── u_e-mailcow_ui-forgot_password.en.md │ │ ├── u_e-mailcow_ui-generic-oidc.de.md │ │ ├── u_e-mailcow_ui-generic-oidc.en.md │ │ ├── u_e-mailcow_ui-keycloak.de.md │ │ ├── u_e-mailcow_ui-keycloak.en.md │ │ ├── u_e-mailcow_ui-ldap.de.md │ │ ├── u_e-mailcow_ui-ldap.en.md │ │ ├── u_e-mailcow_ui-netfilter.de.md │ │ ├── u_e-mailcow_ui-netfilter.en.md │ │ ├── u_e-mailcow_ui-notification-templates.de.md │ │ ├── u_e-mailcow_ui-notification-templates.en.md │ │ ├── u_e-mailcow_ui-pushover.de.md │ │ ├── u_e-mailcow_ui-pushover.en.md │ │ ├── u_e-mailcow_ui-spamalias.de.md │ │ ├── u_e-mailcow_ui-spamalias.en.md │ │ ├── u_e-mailcow_ui-spamfilter.de.md │ │ ├── u_e-mailcow_ui-spamfilter.en.md │ │ ├── u_e-mailcow_ui-sub_addressing.de.md │ │ ├── u_e-mailcow_ui-sub_addressing.en.md │ │ ├── u_e-mailcow_ui-tags.de.md │ │ ├── u_e-mailcow_ui-tags.en.md │ │ ├── u_e-mailcow_ui-tfa.de.md │ │ └── u_e-mailcow_ui-tfa.en.md │ ├── u_e-80_to_443.de.md │ ├── u_e-80_to_443.en.md │ ├── u_e-autodiscover_config.de.md │ ├── u_e-autodiscover_config.en.md │ ├── u_e-reeanble-weak-protocols.de.md │ ├── u_e-reeanble-weak-protocols.en.md │ ├── u_e-update-hooks.de.md │ ├── u_e-update-hooks.en.md │ ├── u_e-why_unbound.de.md │ └── u_e-why_unbound.en.md ├── models │ ├── model-acl.de.md │ ├── model-acl.en.md │ ├── model-passwd.de.md │ ├── model-passwd.en.md │ ├── model-sender_rcv.de.md │ └── model-sender_rcv.en.md ├── post_installation │ ├── firststeps-authorize_watchdog_and_bounces.de.md │ ├── firststeps-authorize_watchdog_and_bounces.en.md │ ├── firststeps-disable_ipv6.de.md │ ├── firststeps-disable_ipv6.en.md │ ├── firststeps-dmarc_reporting.de.md │ ├── firststeps-dmarc_reporting.en.md │ ├── firststeps-ip_bindings.de.md │ ├── firststeps-ip_bindings.en.md │ ├── firststeps-local_mta.de.md │ ├── firststeps-local_mta.en.md │ ├── firststeps-logging.de.md │ ├── firststeps-logging.en.md │ ├── firststeps-snat.de.md │ ├── firststeps-snat.en.md │ ├── firststeps-ssl.de.md │ ├── firststeps-ssl.en.md │ ├── firststeps-sync_jobs_migration.de.md │ ├── firststeps-sync_jobs_migration.en.md │ └── reverse-proxy │ │ ├── r_p-apache24.de.md │ │ ├── r_p-apache24.en.md │ │ ├── r_p-caddy2.de.md │ │ ├── r_p-caddy2.en.md │ │ ├── r_p-haproxy.de.md │ │ ├── r_p-haproxy.en.md │ │ ├── r_p-nginx.de.md │ │ ├── r_p-nginx.en.md │ │ ├── r_p-traefik2.de.md │ │ ├── r_p-traefik2.en.md │ │ ├── r_p.de.md │ │ └── r_p.en.md ├── third_party │ ├── abuseipdb │ │ ├── third_party-abuseipdb.de.md │ │ └── third_party-abuseipdb.en.md │ ├── borgmatic │ │ ├── third_party-borgmatic.de.md │ │ └── third_party-borgmatic.en.md │ ├── checkmk │ │ ├── u_e-checkmk.de.md │ │ └── u_e-checkmk.en.md │ ├── exchange_onprem │ │ ├── third_party-exchange_onprem.de.md │ │ └── third_party-exchange_onprem.en.md │ ├── gitea │ │ ├── third_party-gitea.de.md │ │ └── third_party-gitea.en.md │ ├── gogs │ │ ├── third_party-gogs.de.md │ │ └── third_party-gogs.en.md │ ├── mailman3 │ │ ├── third_party-mailman3.de.md │ │ └── third_party-mailman3.en.md │ ├── mailpiler │ │ ├── third_party-mailpiler_integration.de.md │ │ └── third_party-mailpiler_integration.en.md │ ├── nextcloud │ │ ├── third_party-nextcloud.de.md │ │ └── third_party-nextcloud.en.md │ ├── portainer │ │ ├── third_party-portainer.de.md │ │ └── third_party-portainer.en.md │ └── roundcube │ │ ├── third_party-roundcube.de.md │ │ └── third_party-roundcube.en.md └── troubleshooting │ ├── debug-admin_login_sogo.de.md │ ├── debug-admin_login_sogo.en.md │ ├── debug-attach_service.de.md │ ├── debug-attach_service.en.md │ ├── debug-common_problems.de.md │ ├── debug-common_problems.en.md │ ├── debug-logs.de.md │ ├── debug-logs.en.md │ ├── debug-mysql_aria.de.md │ ├── debug-mysql_aria.en.md │ ├── debug-mysql_upgrade.de.md │ ├── debug-mysql_upgrade.en.md │ ├── debug-resend-quarantine-notifications.de.md │ ├── debug-resend-quarantine-notifications.en.md │ ├── debug-reset_pw.de.md │ ├── debug-reset_pw.en.md │ ├── debug-reset_tls.de.md │ ├── debug-reset_tls.en.md │ ├── debug-rm_volumes.de.md │ ├── debug-rm_volumes.en.md │ ├── debug-rspamd_memory_leaks.de.md │ ├── debug-rspamd_memory_leaks.en.md │ ├── debug.de.md │ └── debug.en.md ├── includes └── abbreviations.md ├── mkdocs.yml ├── overrides └── main.html └── requirements.txt /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "enabled": true, 3 | "timezone": "Europe/Berlin", 4 | "dependencyDashboard": true, 5 | "dependencyDashboardTitle": "Renovate Dashboard", 6 | "commitBody": "Signed-off-by: milkmaker ", 7 | "rebaseWhen": "auto", 8 | "labels": ["renovate"], 9 | "assignees": [ 10 | "@magiccc" 11 | ], 12 | "baseBranches": ["master"], 13 | "enabledManagers": ["github-actions", "pip_requirements"] 14 | } 15 | -------------------------------------------------------------------------------- /.github/workflows/fix_redirects.sh: -------------------------------------------------------------------------------- 1 | #/bin/bash 2 | find ./site/ -maxdepth 2 -mindepth 2 -type f -name 'index.html' -not -path './site/de/*' -not -path './site/en/*' | while read f; do 3 | echo "Fixing redirect '$f'..." 4 | sed -i -E 's/\.en\/"/\/"/' $f 5 | done 6 | -------------------------------------------------------------------------------- /.github/workflows/gh-pages.yml: -------------------------------------------------------------------------------- 1 | name: Build and deploy to gh-pages 2 | on: 3 | push: 4 | branches: 5 | - master 6 | workflow_dispatch: # Allow to run workflow manually 7 | 8 | jobs: 9 | build-and-deploy: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout 📥 13 | uses: actions/checkout@v4.2.2 14 | with: 15 | token: '${{ secrets.GHPAGES_ACTION_CHECKOUT_TOKEN_PAT }}' 16 | fetch-depth: '0' # https://github.com/timvink/mkdocs-git-revision-date-localized-plugin#note-when-using-build-environments 17 | 18 | - name: Install dependencies 🐄 19 | run: | 20 | sudo apt-get -y update 21 | sudo apt-get -y install python3-pip 22 | python -m venv venv 23 | source ./venv/bin/activate 24 | pip install -r requirements.txt 25 | 26 | - name: Build site 🔧 27 | run: | 28 | source ./venv/bin/activate 29 | mkdocs build --verbose --clean 30 | 31 | - name: Fixing redirects 🚧 32 | run: | 33 | bash .github/workflows/fix_redirects.sh 34 | 35 | - name: Deploy 🚀 36 | uses: JamesIves/github-pages-deploy-action@v4.7.3 37 | with: 38 | token: '${{ secrets.GHPAGES_ACTION_DEPLOY_TOKEN_PAT }}' 39 | git-config-name: '${{ secrets.GHPAGES_ACTION_DEPLOY_GITNAME_PAT }}' 40 | git-config-email: '${{ secrets.GHPAGES_ACTION_DEPLOY_GITEMAIL_PAT }}' 41 | branch: gh-pages # The branch the action should deploy to. 42 | folder: site # The folder the action should deploy. 43 | -------------------------------------------------------------------------------- /.github/workflows/renovate_check-build.yml: -------------------------------------------------------------------------------- 1 | name: Check build for renovate 2 | on: 3 | push: 4 | branches: 5 | - 'renovate/**' 6 | jobs: 7 | build-and-deploy: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout 📥 11 | uses: actions/checkout@v4.2.2 12 | with: 13 | token: '${{ secrets.GHPAGES_ACTION_CHECKOUT_TOKEN_PAT }}' 14 | fetch-depth: '0' # https://github.com/timvink/mkdocs-git-revision-date-localized-plugin#note-when-using-build-environments 15 | 16 | - name: Install dependencies 🐄 17 | run: | 18 | sudo apt-get -y update 19 | sudo apt-get -y install python3-pip 20 | python -m venv venv 21 | source ./venv/bin/activate 22 | pip install -r requirements.txt 23 | 24 | - name: Build site 🔧 25 | run: | 26 | source ./venv/bin/activate 27 | mkdocs build --verbose --clean 28 | 29 | - name: Fixing redirects 🚧 30 | run: | 31 | bash .github/workflows/fix_redirects.sh 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cache 2 | .venv 3 | .DS_Store -------------------------------------------------------------------------------- /docs/assets/fonts/source-code-pro-v21-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-code-pro-v21-latin-regular.eot -------------------------------------------------------------------------------- /docs/assets/fonts/source-code-pro-v21-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-code-pro-v21-latin-regular.ttf -------------------------------------------------------------------------------- /docs/assets/fonts/source-code-pro-v21-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-code-pro-v21-latin-regular.woff -------------------------------------------------------------------------------- /docs/assets/fonts/source-code-pro-v21-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-code-pro-v21-latin-regular.woff2 -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-700.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-700.eot -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-700.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-700.ttf -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-700.woff -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-700.woff2 -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-regular.eot -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-regular.ttf -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-regular.woff -------------------------------------------------------------------------------- /docs/assets/fonts/source-sans-pro-v21-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/fonts/source-sans-pro-v21-latin-regular.woff2 -------------------------------------------------------------------------------- /docs/assets/images/checkmk/long_check_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/checkmk/long_check_output.png -------------------------------------------------------------------------------- /docs/assets/images/checkmk/no_updates_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/checkmk/no_updates_available.png -------------------------------------------------------------------------------- /docs/assets/images/checkmk/updates_available.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/checkmk/updates_available.png -------------------------------------------------------------------------------- /docs/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/favicon.png -------------------------------------------------------------------------------- /docs/assets/images/i_u_m/nightly_footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/i_u_m/nightly_footer.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-bl_wl.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-bl_wl.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-bl_wl.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-bl_wl.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-domain_email_tags.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-domain_email_tags.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-domain_email_tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-domain_email_tags.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-domain_tags_ribbon.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-domain_tags_ribbon.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-domain_tags_ribbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-domain_tags_ribbon.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_acl.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_acl.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_acl.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_acl.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_field.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_field.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_field.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_mailbox_field.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_server_settings.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_server_settings.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-forgot-password_server_settings.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-forgot-password_server_settings.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_external_endpoint.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_external_endpoint.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_external_endpoint.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_external_endpoint.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_regex.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_regex.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_regex.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_regex.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_settings.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_settings.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-netfilter_settings.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-netfilter_settings.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-spamalias.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-spamalias.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-spamalias.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-spamalias.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-spamfilter.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-spamfilter.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-spamfilter.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-spamfilter.en.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-tagging.de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-tagging.de.png -------------------------------------------------------------------------------- /docs/assets/images/manual-guides/mailcow-tagging.en.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/manual-guides/mailcow-tagging.en.png -------------------------------------------------------------------------------- /docs/assets/images/troubleshooting/mailcow-backupmx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mailcow/mailcow-dockerized-docs/ee6c95cf52314ace77e4fe607fe91865e6277348/docs/assets/images/troubleshooting/mailcow-backupmx.png -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup-export.de.md: -------------------------------------------------------------------------------- 1 | ### Export von Backups 2 | 3 | #### Sicherung 4 | Es wird dringend empfohlen, den Mailserver regelmäßig zu sichern, um Datenverluste zu vermeiden. Zusätzlich sollte das Backup exportiert werden, um einen vollständigen Datenverlust zu verhindern. 5 | 6 | Allgemeine Informationen zum Thema Sicherungen finden Sie im Kapitel [Sicherung](b_n_r-backup.md). 7 | 8 | In diesem Kapitel werden die Möglichkeiten zum Export von Backups erläutert. 9 | 10 | #### Borgmatic Backup 11 | Borgmatic ist eine ausgezeichnete Lösung, um Backups auf Ihrem mailcow-Setup durchzuführen. Es bietet eine sichere Verschlüsselung Ihrer Daten und ist äußerst einfach einzurichten. 12 | 13 | Darüber hinaus ist die Funktion zum Export von Backups bereits integriert. 14 | 15 | Weitere Informationen zum Backup und Export mit Borgmatic finden Sie im Kapitel [Borgmatic Backup](../third_party/borgmatic/third_party-borgmatic.md). 16 | 17 | #### Export via WebDAV / sFTP 18 | Mit dem Backup-Skript [mailcow-backup.sh](https://github.com/the1andoni/mailcow-backupV2) können Backups auch per FTP oder WebDAV exportiert werden. 19 | 20 | !!! warning "Hinweis" 21 | Diese Funktion wird von der Community entwickelt. Der Link verweist auf ein externes (nicht mailcow-eigenes) GitHub-Repository. 22 | 23 | Das Skript sammelt mithilfe der mailcow-eigenen Backup-Funktion alle erforderlichen Daten und verpackt diese in ein komprimiertes Verzeichnis. 24 | 25 | Für die Einrichtung der Backups wird empfohlen, die Dokumentation des entsprechenden Repositories zu konsultieren. 26 | 27 | Das Skript wird aktiv weiterentwickelt und um zusätzliche Funktionen ergänzt. Es wird grundsätzlich empfohlen, bei der Nutzung von FTP die Backups über TLS-Zertifikate zu exportieren. 28 | -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup-export.en.md: -------------------------------------------------------------------------------- 1 | ### Exporting Backups 2 | 3 | #### Backup 4 | It is strongly recommended to back up the mail server regularly to prevent data loss. Additionally, backups should be exported to avoid complete data loss. 5 | 6 | General information on backups can be found in the chapter [Backup](b_n_r-backup.md). 7 | 8 | This chapter explains the options for exporting backups. 9 | 10 | #### Borgmatic Backup 11 | Borgmatic is an excellent solution for performing backups on your mailcow setup. It provides secure encryption of your data and is very easy to set up. 12 | 13 | Additionally, the functionality for exporting backups is already integrated. 14 | 15 | Further information on backup and export with Borgmatic can be found in the chapter [Borgmatic Backup](../third_party/borgmatic/third_party-borgmatic.md). 16 | 17 | #### Export via WebDAV / sFTP 18 | Backups can also be exported via FTP or Nextcloud using the backup script [mailcow-backup.sh](https://github.com/the1andoni/mailcow-backupV2). 19 | 20 | !!! warning 21 | This feature is community-developed. The link directs to an external (non-mailcow) GitHub repository. 22 | 23 | The script collects all necessary data using mailcow's built-in backup functionality and packages it into a compressed directory. 24 | 25 | For setting up backups, it is recommended to consult the documentation of the respective repository. 26 | 27 | The script is actively developed and enhanced with additional features. It is generally recommended to export backups over FTP using TLS certificates. 28 | -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup_restore-maildir.de.md: -------------------------------------------------------------------------------- 1 | ### Sicherung 2 | 3 | Diese Zeile sichert das vmail-Verzeichnis in eine Datei backup_vmail.tar.gz im mailcow-Root-Verzeichnis: 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | cd /pfad/zu/mailcow-dockerized 9 | docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar cvfz /backup/backup_vmail.tar.gz /vmail 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | cd /pfad/zu/mailcow-dockerized 16 | docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar cvfz /backup/backup_vmail.tar.gz /vmail 17 | ``` 18 | 19 | Sie können den Pfad ändern, indem Sie ${PWD} (das dem aktuellen Verzeichnis entspricht) zu einem beliebigen Pfad ändern, auf den Sie Schreibzugriff haben. 20 | Setzen Sie den Dateinamen `backup_vmail.tar.gz` auf einen beliebigen Namen, aber lassen Sie den Pfad so wie er ist. Beispiel: `[...] tar cvfz /backup/mein_eigener_dateiname_.tar.gz` 21 | 22 | ### Wiederherstellen 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | cd /pfad/zu/mailcow-dockerized 28 | docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar xvfz /backup/backup_vmail.tar.gz 29 | ``` 30 | 31 | === "docker-compose (Standalone)" 32 | 33 | ``` bash 34 | cd /pfad/zu/mailcow-dockerized 35 | docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar xvfz /backup/backup_vmail.tar.gz 36 | ``` -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup_restore-maildir.en.md: -------------------------------------------------------------------------------- 1 | ### Backup 2 | 3 | This line backups the vmail directory to a file backup_vmail.tar.gz in the mailcow root directory: 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | cd /path/to/mailcow-dockerized 9 | docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar cvfz /backup/backup_vmail.tar.gz /vmail 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | cd /path/to/mailcow-dockerized 16 | docker run --rm -i -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar cvfz /backup/backup_vmail.tar.gz /vmail 17 | ``` 18 | 19 | You can change the path by adjusting ${PWD} (which equals to the current directory) to any path you have write-access to. 20 | Set the filename `backup_vmail.tar.gz` to any custom name, but leave the path as it is. Example: `[...] tar cvfz /backup/my_own_filename_.tar.gz` 21 | 22 | ### Restore 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | cd /path/to/mailcow-dockerized 28 | docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar xvfz /backup/backup_vmail.tar.gz 29 | ``` 30 | 31 | === "docker-compose (Standalone)" 32 | 33 | ``` bash 34 | cd /path/to/mailcow-dockerized 35 | docker run --rm -it -v $(docker inspect --format '{{ range .Mounts }}{{ if eq .Destination "/var/vmail" }}{{ .Name }}{{ end }}{{ end }}' $(docker-compose ps -q dovecot-mailcow)):/vmail -v ${PWD}:/backup debian:bullseye-slim tar xvfz /backup/backup_vmail.tar.gz 36 | ``` -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup_restore-mysql.de.md: -------------------------------------------------------------------------------- 1 | ## Sicherung 2 | 3 | === "docker compose (Plugin)" 4 | 5 | ``` bash 6 | cd /pfad/zu/mailcow-dockerized 7 | source mailcow.conf 8 | DATE=$(date +"%Y%m%d_%H%M%S") 9 | docker compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | cd /pfad/zu/mailcow-dockerized 16 | source mailcow.conf 17 | DATE=$(date +"%Y%m%d_%H%M%S") 18 | docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql 19 | ``` 20 | 21 | ## Wiederherstellen 22 | 23 | !!! warning "Warnung" 24 | === "docker compose (Plugin)" 25 | Sie sollten den SQL-Dump ohne `docker compose` umleiten, um Parsing-Fehler zu vermeiden. 26 | 27 | === "docker-compose (Standalone)" 28 | 29 | Sie sollten den SQL-Dump ohne `docker-compose` umleiten, um Parsing-Fehler zu vermeiden. 30 | 31 | ``` bash 32 | cd /pfad/zu/mailcow-dockerized 33 | source mailcow.conf 34 | docker exec -i $(docker compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < backup_file.sql 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/backup_restore/b_n_r-backup_restore-mysql.en.md: -------------------------------------------------------------------------------- 1 | ## Backup 2 | 3 | === "docker compose (Plugin)" 4 | 5 | ``` bash 6 | cd /path/to/mailcow-dockerized 7 | source mailcow.conf 8 | DATE=$(date +"%Y%m%d_%H%M%S") 9 | docker compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | cd /path/to/mailcow-dockerized 16 | source mailcow.conf 17 | DATE=$(date +"%Y%m%d_%H%M%S") 18 | docker-compose exec -T mysql-mailcow mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql 19 | ``` 20 | 21 | ## Restore 22 | 23 | !!! warning 24 | === "docker compose (Plugin)" 25 | You should redirect the SQL dump without `docker compose` to prevent parsing errors. 26 | 27 | === "docker-compose (Standalone)" 28 | 29 | You should redirect the SQL dump without `docker-compose` to prevent parsing errors. 30 | 31 | ``` bash 32 | cd /path/to/mailcow-dockerized 33 | source mailcow.conf 34 | docker exec -i $(docker compose ps -q mysql-mailcow) mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < backup_file.sql 35 | ``` -------------------------------------------------------------------------------- /docs/client/client-android.de.md: -------------------------------------------------------------------------------- 1 | 1. Öffnen Sie die App *Email*. 2 | 2. Wenn dies Ihr erstes E-Mail-Konto ist, tippen Sie auf *Konto hinzufügen*; wenn nicht, tippen Sie auf *Mehr* und *Einstellungen* und dann *Konto hinzufügen*. 3 | 3. Wählen Sie *Microsoft Exchange ActiveSync*. 4 | 4. Geben Sie Ihre E-Mail Adresse () und Ihr Passwort ein. 5 | 5. Tippen Sie auf *Anmelden*. -------------------------------------------------------------------------------- /docs/client/client-android.en.md: -------------------------------------------------------------------------------- 1 | 1. Open the *Email* app. 2 | 2. If this is your first email account, tap *Add Account*; if not, tap *More* and *Settings* and then *Add account*. 3 | 3. Select *Microsoft Exchange ActiveSync*. 4 | 4. Enter your email address () and password. 5 | 5. Tap *Sign in*. -------------------------------------------------------------------------------- /docs/client/client-kontact.de.md: -------------------------------------------------------------------------------- 1 | 1. Starten Sie Kontact. 2 | 2. Wenn Sie Kontact oder KMail zum ersten Mal gestartet haben, werden Sie aufgefordert, Ihr Konto einzurichten. Fahren Sie mit Schritt 4 fort. 3 | 3. Gehen Sie zu *Mail* in der Seitenleiste. Gehen Sie zum Menü *Tools* und wählen Sie *Account Wizard*. 4 | 4. Geben Sie Ihren Namen (), E-Mail Adresse () und Ihr Passwort ein. Klicken Sie auf *Weiter*. 5 | 5. Klicken Sie auf *Konto erstellen*. Wenn Sie dazu aufgefordert werden, geben Sie Ihr Passwort erneut ein und klicken Sie auf *OK*. 6 | 6. Schließen Sie das Fenster, indem Sie auf *Beenden* klicken. 7 | 7. Gehen Sie zu *Kalender* in der Seitenleiste. 8 | 8. Gehen Sie zum Menü *Einstellungen* und wählen Sie *Konfigurieren Sie KOrganizer*. 9 | 9. Gehen Sie zur Registerkarte *Kalender* und klicken Sie auf die Schaltfläche *Hinzufügen*. 10 | 10. Wählen Sie *DAV-Groupware-Ressource* und klicken Sie auf *OK*. 11 | 11. Geben Sie Ihre E-Mail Adresse () und Ihr Passwort ein. Klicken Sie auf *Weiter*. 12 | 12. Wählen Sie *ScalableOGo* aus dem Dropdown-Menü und klicken Sie auf *Weiter*. 13 | 13. Geben Sie den mailcow Hostname in das Feld *Host* ein und klicken Sie auf *Weiter*. 14 | 14. Klicken Sie auf *Verbindung testen* und dann auf *Fertigstellen*. Klicken Sie abschließend zweimal auf *OK*. 15 | 16 | Sobald Sie Kontact eingerichtet haben, können Sie KMail, KOrganizer und KAddressBook auch einzeln verwenden. -------------------------------------------------------------------------------- /docs/client/client-kontact.en.md: -------------------------------------------------------------------------------- 1 | 1. Launch Kontact. 2 | 2. If this is the first time you launched Kontact or KMail, it asks you to set up your account. Proceed to step 4. 3 | 3. Go to *Mail* in the sidebar. Go to the *Tools* menu and select *Account Wizard*. 4 | 4. Enter your name (), email address () and your password. Click *Next*. 5 | 5. Click *Create Account*. If prompted, re-enter your password and click *OK*. 6 | 6. Close the window by clicking *Finish*. 7 | 7. Go to *Calendar* in the sidebar. 8 | 8. Go to the *Settings* menu and select *Configure KOrganizer*. 9 | 9. Go to the *Calendars* tab and click the *Add* button. 10 | 10. Choose *DAV groupware resource* and click *OK*. 11 | 11. Enter your email address () and your password. Click *Next*. 12 | 12. Select *ScalableOGo* from the dropdown menu and click *Next*. 13 | 13. Enter your mailcow hostname into the *Host* field and click *Next*. 14 | 14. Click *Test Connection* and then *Finish*. Finally, click *OK* twice. 15 | 16 | Once you have set up Kontact, you can also use KMail, KOrganizer and KAddressBook individually. -------------------------------------------------------------------------------- /docs/client/client-manual.de.md: -------------------------------------------------------------------------------- 1 | Diese Anweisungen gelten nur für unveränderte Portbindungen! 2 | 3 | ## E-Mail 4 | |Dienst|Verschlüsselung|Host|Port| 5 | |--- |--- |--- |--- | 6 | |IMAP|STARTTLS| mailcow hostname|143| 7 | |IMAPS|SSL| mailcow hostname|993| 8 | |POP3|STARTTLS| mailcow hostname|110| 9 | |POP3S|SSL| mailcow hostname|995| 10 | |SMTP|STARTTLS| mailcow hostname|587| 11 | |SMTPS|SSL| mailcow hostname|465| 12 | 13 | Bitte verwenden Sie "plain" als Authentifizierungsmechanismus. Entgegen der Annahme werden keine Passwörter im Klartext übertragen, da ohne TLS keine Authentifizierung stattfinden darf. 14 | 15 | ## Kontakte und Kalender 16 | 17 | SOGos Standard-URLs für Kalender (CalDAV) und Kontakte (CardDAV): 18 | 19 | 1. **CalDAV** https://mail.example.com/SOGo/dav/user@example.com/Calendar/personal/https:///SOGo/dav//Calendar/personal/ 20 | 21 | 2. **CardDAV** https://mail.example.com/SOGo/dav/user@example.com/Contacts/personal/https:///SOGo/dav//Contacts/personal/ 22 | 23 | Einige Anwendungen verlangen möglicherweise die Verwendung von https://mail.example.com/SOGo/dav/https:///SOGo/dav/ _oder_ den vollständigen Pfad zu Ihrem Kalender, der in SOGo gefunden und kopiert werden kann. -------------------------------------------------------------------------------- /docs/client/client-manual.en.md: -------------------------------------------------------------------------------- 1 | These instructions are valid for unchanged port bindings only! 2 | 3 | ## Email 4 | 5 | |Service|Encryption|Host|Port| 6 | |--- |--- |--- |--- | 7 | |IMAP|STARTTLS| mailcow hostname|143| 8 | |IMAPS|SSL| mailcow hostname|993| 9 | |POP3|STARTTLS| mailcow hostname|110| 10 | |POP3S|SSL| mailcow hostname|995| 11 | |SMTP|STARTTLS| mailcow hostname|587| 12 | |SMTPS|SSL| mailcow hostname|465| 13 | 14 | Please use the "plain" password setting as the authentication mechanism. Contrary to what the name implies, the password will not be transferred to the server in plain text as no authentication is allowed to take place without TLS. 15 | 16 | ## Contacts and calendars 17 | 18 | SOGos default calendar (CalDAV) and contacts (CardDAV) URLs: 19 | 20 | 1. **CalDAV** https://mail.example.com/SOGo/dav/user@example.com/Calendar/personal/https:///SOGo/dav//Calendar/personal/ 21 | 22 | 2. **CardDAV** https://mail.example.com/SOGo/dav/user@example.com/Contacts/personal/https:///SOGo/dav//Contacts/personal/ 23 | 24 | Some applications may require you to use https://mail.example.com/SOGo/dav/https:///SOGo/dav/ _or_ the full path to your calendar, which can be found and copied from within SOGo. -------------------------------------------------------------------------------- /docs/client/client.de.md: -------------------------------------------------------------------------------- 1 | mailcow unterstützt eine Vielzahl von E-Mail-Clients, sowohl auf Desktop-Computern als auch auf Smartphones. 2 | Im Folgenden finden Sie eine Reihe von Konfigurationsanleitungen, die erklären, wie Sie Ihr mailcow-Konto konfigurieren können. 3 | 4 |
5 |
6 |

Tipp

7 | Wenn Sie auf diese Seite zugreifen, indem Sie sich bei Ihrem mailcow-Server anmelden und auf den Link "Konfigurationsanleitungen für E-Mail-Clients und Smartphones anzeigen" klicken, werden alle Anleitungen mit Ihrer E-Mail-Adresse und Ihrem Servernamen personalisiert. 8 |
9 |
10 | 11 |
12 |
13 |

Erfolgreich

14 | Da Sie diese Seite aufgerufen haben, nachdem Sie sich in Ihren mailcow-Server eingeloggt haben, wurden alle Anleitungen mit Ihrer E-Mail-Adresse und Ihrem Servernamen personalisiert. 15 |
16 |
17 | 18 | - [Android](client-android.md) 19 | - [Apple iOS / macOS](client-apple.md) 20 | - [eM Client](client-emclient.md) 21 | - [KDE Kontact / KMail](client-kontact.md) 22 | - [Microsoft Outlook](client-outlook.md) 23 | - [Mozilla Thunderbird](client-thunderbird.md) 24 | - [Manual configuration](client-manual.md) -------------------------------------------------------------------------------- /docs/client/client.en.md: -------------------------------------------------------------------------------- 1 | mailcow supports a variety of email clients, both on desktop computers and on smartphones. 2 | Below, you can find a number of configuration guides that explain how to configure your mailcow account. 3 | 4 |
5 |
6 |

Tip

7 | If you access this page by logging into your mailcow server and clicking the "Show configuration guides for email clients and smartphones" link, all of the guides will be personalized with your email address and server name. 8 |
9 |
10 | 11 |
12 |
13 |

Success

14 | Since you accessed this page after logging into your mailcow server, all of the guides have been personalized with your email address and server name. 15 |
16 |
17 | 18 | - [Android](client-android.md) 19 | - [Apple iOS / macOS](client-apple.md) 20 | - [eM Client](client-emclient.md) 21 | - [KDE Kontact / KMail](client-kontact.md) 22 | - [Microsoft Outlook](client-outlook.md) 23 | - [Mozilla Thunderbird](client-thunderbird.md) 24 | - [Manual configuration](client-manual.md) -------------------------------------------------------------------------------- /docs/maintenance/deinstall.de.md: -------------------------------------------------------------------------------- 1 | Um mailcow: dockerized mit all seinen Volumes, Images und Containern zu entfernen, tun Sie dies: 2 | === "docker compose (Plugin)" 3 | 4 | ``` bash 5 | docker compose down -v --rmi all --remove-orphans 6 | ``` 7 | 8 | === "docker-compose (Standalone)" 9 | 10 | ``` bash 11 | docker-compose down -v --rmi all --remove-orphans 12 | ``` 13 | 14 | !!! info 15 | - **-v** Entfernt benannte Volumes, die im Abschnitt `volumes` der Compose-Datei deklariert sind, und anonyme Volumes, die an Container angehängt sind. 16 | - **--rmi ** Images entfernen. Der Typ muss einer der folgenden sein: `all`: Entfernt alle Images, die von einem beliebigen Dienst verwendet werden. `local`: Entfernt nur Bilder, die kein benutzerdefiniertes Tag haben, das durch das Feld "image" gesetzt wurde. 17 | - **--remove-orphans** Entfernt Container für Dienste, die nicht in der Compose-Datei definiert sind. 18 | - Standardmäßig entfernt `docker compose down` nur derzeit aktive Container und Netzwerke, die in der Datei `docker-compose.yml` definiert sind. 19 | -------------------------------------------------------------------------------- /docs/maintenance/deinstall.en.md: -------------------------------------------------------------------------------- 1 | To remove mailcow: dockerized with all it's volumes, images and containers do: 2 | === "docker compose (Plugin)" 3 | 4 | ``` bash 5 | docker compose down -v --rmi all --remove-orphans 6 | ``` 7 | 8 | === "docker-compose (Standalone)" 9 | 10 | ``` bash 11 | docker-compose down -v --rmi all --remove-orphans 12 | ``` 13 | 14 | !!! info 15 | - **-v** Remove named volumes declared in the `volumes` section of the Compose file and anonymous volumes attached to containers. 16 | - **--rmi ** Remove images. Type must be one of: `all`: Remove all images used by any service. `local`: Remove only images that don't have a custom tag set by the `image` field. 17 | - **--remove-orphans** Remove containers for services not defined in the compose file. 18 | - By default `docker compose down` only removes currently active containers and networks defined in the `docker-compose.yml`. 19 | -------------------------------------------------------------------------------- /docs/manual-guides/ClamAV/u_e-clamav-whitelist.de.md: -------------------------------------------------------------------------------- 1 | ## Whitelist für bestimmte ClamAV-Signaturen 2 | 3 | Es kann vorkommen, dass legitime (saubere) Mails von ClamAV blockiert werden (Rspamd markiert die Mail mit `VIRUS_FOUND`). So werden beispielsweise interaktive PDF-Formularanhänge standardmäßig blockiert, da der eingebettete Javascript-Code für schädliche Zwecke verwendet werden könnte. Überprüfen Sie dies anhand der clamd-Protokolle, z.B.: 4 | === "docker compose (Plugin)" 5 | 6 | ``` bash 7 | docker compose logs clamd-mailcow | grep "FOUND" 8 | ``` 9 | 10 | === "docker-compose (Standalone)" 11 | 12 | ``` bash 13 | docker-compose logs clamd-mailcow | grep "FOUND" 14 | ``` 15 | 16 | Diese Zeile bestätigt, dass ein solcher identifiziert wurde: 17 | 18 | ```text 19 | clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -> instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND 20 | ``` 21 | 22 | Um diese spezielle Signatur auf die Whitelist zu setzen (und den Versand dieses Dateityps im Anhang zu ermöglichen), fügen Sie sie der ClamAV-Signatur-Whitelist-Datei hinzu: 23 | 24 | ```bash 25 | echo 'PUA.Pdf.Trojan.EmbeddedJavaScript-1' >> data/conf/clamav/whitelist.ign2 26 | ``` 27 | 28 | Dann starten Sie den clamd-mailcow Service Container in der mailcow UI oder mit docker compose neu: 29 | === "docker compose (Plugin)" 30 | 31 | ``` bash 32 | docker compose restart clamd-mailcow 33 | ``` 34 | 35 | === "docker-compose (Standalone)" 36 | 37 | ``` bash 38 | docker-compose restart clamd-mailcow 39 | ``` 40 | 41 | Bereinigen Sie zwischengespeicherte ClamAV-Ergebnisse in Redis: 42 | === "docker compose (Plugin)" 43 | 44 | ``` bash 45 | docker compose exec redis-mailcow /bin/sh 46 | /data # redis-cli KEYS rs_cl* | xargs redis-cli DEL 47 | /data # exit 48 | ``` 49 | 50 | === "docker-compose (Standalone)" 51 | 52 | ``` bash 53 | docker-compose exec redis-mailcow /bin/sh 54 | /data # redis-cli KEYS rs_cl* | xargs redis-cli DEL 55 | /data # exit 56 | ``` 57 | -------------------------------------------------------------------------------- /docs/manual-guides/ClamAV/u_e-clamav-whitelist.en.md: -------------------------------------------------------------------------------- 1 | ## Whitelist specific ClamAV signatures 2 | 3 | You may find that legitimate (clean) mail is being blocked by ClamAV (Rspamd will flag the mail with `VIRUS_FOUND`). For instance, interactive PDF form attachments are blocked by default because the embedded Javascript code may be used for nefarious purposes. Confirm by looking at the clamd logs, e.g.: 4 | === "docker compose (Plugin)" 5 | 6 | ``` bash 7 | docker compose logs clamd-mailcow | grep "FOUND" 8 | ``` 9 | 10 | === "docker-compose (Standalone)" 11 | 12 | ``` bash 13 | docker-compose logs clamd-mailcow | grep "FOUND" 14 | ``` 15 | 16 | This line confirms that such was identified: 17 | 18 | ```text 19 | clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -> instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND 20 | ``` 21 | 22 | To whitelist this particular signature (and enable sending this type of file attached), add it to the ClamAV signature whitelist file: 23 | 24 | ```bash 25 | echo 'PUA.Pdf.Trojan.EmbeddedJavaScript-1' >> data/conf/clamav/whitelist.ign2 26 | ``` 27 | 28 | Then restart the clamd-mailcow service container in the mailcow UI or using docker compose: 29 | === "docker compose (Plugin)" 30 | 31 | ``` bash 32 | docker compose restart clamd-mailcow 33 | ``` 34 | 35 | === "docker-compose (Standalone)" 36 | 37 | ``` bash 38 | docker-compose restart clamd-mailcow 39 | ``` 40 | 41 | Cleanup cached ClamAV results in Redis: 42 | === "docker compose (Plugin)" 43 | 44 | ``` bash 45 | docker compose exec redis-mailcow /bin/sh 46 | /data # redis-cli KEYS rs_cl* | xargs redis-cli DEL 47 | /data # exit 48 | ``` 49 | 50 | === "docker-compose (Standalone)" 51 | 52 | ``` bash 53 | docker-compose exec redis-mailcow /bin/sh 54 | /data # redis-cli KEYS rs_cl* | xargs redis-cli DEL 55 | /data # exit 56 | ``` 57 | -------------------------------------------------------------------------------- /docs/manual-guides/Docker/u_e-docker-cust_dockerfiles.de.md: -------------------------------------------------------------------------------- 1 | Sie müssen die Override-Datei mit den entsprechenden Build-Tags in den mailcow: dockerized Root-Ordner (d.h. `/opt/mailcow-dockerized`) kopieren: 2 | ``` 3 | cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml 4 | ``` 5 | 6 | 7 | Nehmen Sie Ihre Änderungen in `data/Dockerfiles/$service` vor und erstellen Sie das Image lokal: 8 | ``` 9 | docker build data/Dockerfiles/$service -t mailcow/$service:$tag 10 | ``` 11 | (Ohne persönlichen :$tag wird automatisch :latest verwendet.) 12 | 13 | 14 | Nun muss dieser gerade erstellte Container in docker-compose.override.yml aktiviert werden, z.B.: 15 | ``` 16 | $service-mailcow: 17 | build: ./data/Dockerfiles/$service 18 | image: mailcow/$service:$tag 19 | ``` 20 | 21 | 22 | Abschliessend müssen die geänderten Container automatisch neu erstellt werden: 23 | === "docker compose (Plugin)" 24 | 25 | ``` bash 26 | docker compose up -d 27 | ``` 28 | 29 | === "docker-compose (Standalone)" 30 | 31 | ``` bash 32 | docker-compose up -d 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/manual-guides/Docker/u_e-docker-cust_dockerfiles.en.md: -------------------------------------------------------------------------------- 1 | You need to copy the override file with corresponding build tags to the mailcow: dockerized root folder (i.e. `/opt/mailcow-dockerized`): 2 | 3 | ``` 4 | cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml 5 | ``` 6 | 7 | 8 | Customize `data/Dockerfiles/$service` and build the image locally: 9 | ``` 10 | docker build data/Dockerfiles/$service -t mailcow/$service:$tag 11 | ``` 12 | (without a personalized :$tag docker will use :latest automatically) 13 | 14 | 15 | Now the created image has to be activated in docker-compose.override.yml, e.g.: 16 | ``` 17 | $service-mailcow: 18 | build: ./data/Dockerfiles/$service 19 | image: mailcow/$service:$tag 20 | ``` 21 | 22 | Now auto-recreate modified containers: 23 | === "docker compose (Plugin)" 24 | 25 | ``` bash 26 | docker compose up -d 27 | ``` 28 | 29 | === "docker-compose (Standalone)" 30 | 31 | ``` bash 32 | docker-compose up -d 33 | ``` 34 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-any_acl.de.md: -------------------------------------------------------------------------------- 1 | Am 17. August haben wir die Möglichkeit, mit "jedem" oder "allen authentifizierten Benutzern" zu teilen, standardmäßig deaktiviert. 2 | 3 | Diese Funktion kann wieder aktiviert werden, indem `ACL_ANYONE` auf `allow` in mailcow.conf gesetzt wird: 4 | 5 | ``` 6 | ACL_ANYONE=allow 7 | ``` 8 | 9 | Wenden Sie die Änderungen an, indem Sie den Docker Stack neustarten mit: 10 | 11 | === "docker compose (Plugin)" 12 | 13 | ``` bash 14 | docker compose up -d 15 | ``` 16 | 17 | === "docker-compose (Standalone)" 18 | 19 | ``` bash 20 | docker-compose up -d 21 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-any_acl.en.md: -------------------------------------------------------------------------------- 1 | On August the 17th, we disabled the possibility to share with "any" or "all authenticated users" by default. 2 | 3 | This function can be re-enabled by setting `ACL_ANYONE` to `allow` in mailcow.conf: 4 | 5 | ``` 6 | ACL_ANYONE=allow 7 | ``` 8 | 9 | Apply the changes by restarting the stack: 10 | 11 | === "docker compose (Plugin)" 12 | 13 | ``` bash 14 | docker compose up -d 15 | ``` 16 | 17 | === "docker-compose (Standalone)" 18 | 19 | ``` bash 20 | docker-compose up -d 21 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-catchall_vacation.de.md: -------------------------------------------------------------------------------- 1 | Der Dovecot-Parameter `sieve_vacation_dont_check_recipient` - der in mailcow-Konfigurationen vor dem 21. Juli 2021 standardmäßig auf `yes` gesetzt war - erlaubt Urlaubsantworten auch dann, wenn eine Mail an nicht existierende Mailboxen wie Catch-All-Adressen gesendet wird. 2 | 3 | Wir haben uns entschlossen, diesen Parameter wieder auf `no` zu setzen und dem Benutzer zu erlauben, die Empfängeradresse zu spezifizieren, die eine Urlaubsantwort auslöst. Die auslösenden Empfänger können auch in SOGos Autoresponder-Funktion konfiguriert werden. 4 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-catchall_vacation.en.md: -------------------------------------------------------------------------------- 1 | The Dovecot parameter `sieve_vacation_dont_check_recipient` - which was by default set to `yes` in mailcow configurations pre 21st July 2021 - allows for vacation replies even when a mail is sent to non-existent mailboxes like a catch-all addresses. 2 | 3 | We decided to switch this parameter back to `no` and allow a user to specify which recipient address triggers a vacation reply. The triggering recipients can also be configured in SOGos autoresponder feature. 4 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-extra_conf.de.md: -------------------------------------------------------------------------------- 1 | Erstellen Sie eine Datei `data/conf/dovecot/extra.conf` - falls nicht vorhanden - und fügen Sie Ihren zusätzlichen Inhalt hier ein. 2 | 3 | Starten Sie `dovecot-mailcow` neu, um Ihre Änderungen zu übernehmen: 4 | 5 | 6 | === "docker compose (Plugin)" 7 | 8 | ``` bash 9 | docker compose restart dovecot-mailcow 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose restart dovecot-mailcow 16 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-extra_conf.en.md: -------------------------------------------------------------------------------- 1 | Create a file `data/conf/dovecot/extra.conf` - if missing - and add your additional content here. 2 | 3 | Restart `dovecot-mailcow` to apply your changes: 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | docker compose restart dovecot-mailcow 9 | ``` 10 | 11 | === "docker-compose (Standalone)" 12 | 13 | ``` bash 14 | docker-compose restart dovecot-mailcow 15 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-harden_ciphers.de.md: -------------------------------------------------------------------------------- 1 | Wenn Sie die Standard-Cipher und TLS-Versionen, die in Dovecot akzeptiert werden, entsprechend der aktuellen Version auf stärkere Einstellungen ändern möchten, können Sie Folgendes zu Dovecots [extra.conf](u_e-dovecot-extra_conf.de.md) hinzufügen: 2 | 3 | ```bash 4 | ssl_min_protocol = TLSv1.2 5 | ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305 6 | ``` 7 | 8 | Falls Sie auch die Cipher für Postfix anpassen wollen finden Sie [hier](../Postfix/u_e-postfix-harden_ciphers.de.md) eine entsprechende Anleitung. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-harden_ciphers.en.md: -------------------------------------------------------------------------------- 1 | If you want to change the default ciphers and TLS versions accepted in Dovecot as per it's current release to something stronger, you could add following to Dovecot's [extra.conf](u_e-dovecot-extra_conf.en.md): 2 | 3 | ```bash 4 | ssl_min_protocol = TLSv1.2 5 | ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305 6 | ``` 7 | 8 | If you want to adjust the ciphers for Postfix as well you can find the corresponding tutorial [here](../Postfix/u_e-postfix-harden_ciphers.en.md). -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-idle_interval.de.md: -------------------------------------------------------------------------------- 1 | # Ändern des IMAP-IDLE-Intervalls 2 | ## Was ist das IDLE-Intervall? 3 | Standardmäßig sendet Dovecot eine "Ich bin noch da"-Benachrichtigung an jeden Client, der eine offene Verbindung mit Dovecot hat, um Mails so schnell wie möglich zu erhalten, ohne sie manuell abzufragen (IMAP PUSH). Diese Benachrichtigung wird durch die Einstellung [`imap_idle_notify_interval`](https://wiki.dovecot.org/Timeouts) gesteuert, die standardmäßig auf 2 Minuten eingestellt ist. 4 | 5 | Ein kurzes Intervall führt dazu, dass der Client viele Nachrichten für diese Verbindung erhält, was für mobile Geräte schlecht ist, da jedes Mal, wenn das Gerät diese Nachricht erhält, die Mailing-App aufwachen muss. Dies kann zu einer unnötigen Entladung der Batterie führen. 6 | 7 | ## Bearbeiten Sie den Wert 8 | ### Konfiguration ändern 9 | Erstellen Sie eine neue Datei `data/conf/dovecot/extra.conf` (oder bearbeiten Sie sie, falls sie bereits existiert). 10 | Fügen Sie die Einstellung ein, gefolgt von dem neuen Wert. Um zum Beispiel das Intervall auf 5 Minuten zu setzen, können Sie Folgendes eingeben: 11 | 12 | ``` 13 | imap_idle_notify_interval = 5 mins 14 | ``` 15 | 16 | 29 Minuten ist der maximale Wert, den der [entsprechende RFC](https://tools.ietf.org/html/rfc2177) erlaubt. 17 | 18 | !!! warning "Warnung" 19 | Dies ist keine Standardeinstellung in mailcow, da wir nicht wissen, wie diese Einstellung das Verhalten anderer Clients verändert. Seien Sie vorsichtig, wenn Sie dies ändern und ein anderes Verhalten beobachten. 20 | 21 | ### Dovecot neu laden 22 | Nun laden Sie Dovecot neu: 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | docker compose exec dovecot-mailcow dovecot reload 28 | ``` 29 | 30 | === "docker-compose (Standalone)" 31 | 32 | ``` bash 33 | docker-compose exec dovecot-mailcow dovecot reload 34 | ``` 35 | 36 | !!! info 37 | Sie können den Wert dieser Einstellung überprüfen mit 38 | === "docker compose (Plugin)" 39 | 40 | ``` bash 41 | docker compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval" 42 | ``` 43 | 44 | === "docker-compose (Standalone)" 45 | 46 | ``` bash 47 | docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval" 48 | ``` 49 | Wenn Sie den Wert nicht geändert haben, sollte er auf 2m stehen. Wenn Sie ihn geändert haben, sollten Sie den neuen Wert sehen. 50 | 51 | 52 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-idle_interval.en.md: -------------------------------------------------------------------------------- 1 | # Changing the IMAP IDLE interval 2 | ## What is the IDLE interval? 3 | Per default, Dovecot sends a "I'm still here" notification to every client that has an open connection with Dovecot to get mails as quickly as possible without manually polling it (IMAP PUSH). This notification is controlled by the setting [`imap_idle_notify_interval`](https://wiki.dovecot.org/Timeouts), which defaults to 2 minutes. 4 | 5 | A short interval results in the client getting a lot of messages for this connection, which is bad for mobile devices, because every time the device receives this message, the mailing app has to wake up. This can result in unnecessary battery drain. 6 | 7 | ## Edit the value 8 | ### Change configuration 9 | Create a new file `data/conf/dovecot/extra.conf` (or edit it if it already exists). 10 | Insert the setting followed by the new value. For example, to set the interval to 5 minutes you could type: 11 | 12 | ``` 13 | imap_idle_notify_interval = 5 mins 14 | ``` 15 | 16 | 29 minutes is the maximum value allowed by the [corresponding RFC](https://tools.ietf.org/html/rfc2177). 17 | 18 | !!! warning 19 | This isn't a default setting in mailcow because we don't know how this setting changes the behavior of other clients. Be careful if you change this and monitor different behavior. 20 | 21 | ### Reload Dovecot 22 | Now reload Dovecot: 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | docker compose exec dovecot-mailcow dovecot reload 28 | ``` 29 | 30 | === "docker-compose (Standalone)" 31 | 32 | ``` bash 33 | docker-compose exec dovecot-mailcow dovecot reload 34 | ``` 35 | 36 | !!! info 37 | You can check the value of this setting with 38 | === "docker compose (Plugin)" 39 | 40 | ``` bash 41 | docker compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval" 42 | ``` 43 | 44 | === "docker-compose (Standalone)" 45 | 46 | ``` bash 47 | docker-compose exec dovecot-mailcow dovecot -a | grep "imap_idle_notify_interval" 48 | ``` 49 | If you didn't change it, it should be at 2m. If you did change it, you should see your new value. 50 | 51 | 52 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-lazy_expunge.de.md: -------------------------------------------------------------------------------- 1 | !!! danger "Vorsicht" 2 | Diese Anleitung befindet sich noch in Arbeit, Fehler können passieren! Nutzen Sie diese Funktion mit Bedacht! 3 | 4 | !!! info "Hinweis" 5 | Diese Funktion ist ab mailcow-Versionen 2024-11 kompatibel. Ältere Versionen sind theoretisch ebenfalls in der Lage, die Funktion zu nutzen. Aufgrund interner Änderungen ist die Implementierung jedoch schwieriger und wird hier nicht weiter beschrieben, da nicht unterstüzt. 6 | 7 | ## Vorwort 8 | Dovecot unterstützt seit [geraumer Zeit](https://doc.dovecot.org/2.3/configuration_manual/lazy_expunge_plugin/) eine Funktion namens *Lazy Expunge*, welche es dem Serveradministrator ermöglicht, gelöschte E-Mails eines Benutzerkontos nach der eigentlichen Löschung zurückzuhalten. 9 | 10 | mailcow besitzt eine ähnliche Funktion, die jedoch für Benutzer nicht so leicht zugänglich ist (siehe [Versehentlich gelöschte Daten wiederherstellen (Mail)](../../backup_restore/b_n_r-accidental_deletion.de.md#mail)) und eher als Fallback-Methode für Administratoren dient. 11 | 12 | Mit der Dovecot-Option können Benutzer selbst als gelöscht markierte E-Mails einsehen und wiederherstellen, bevor diese dann automatisch vom Dovecot-Server gelöscht werden. 13 | 14 | ## Einrichtung 15 | 16 | 1. Bearbeiten Sie die `extra.conf` im Dovecot-Konfigurationsordner (in der Regel unter `MAILCOW_ROOT/data/conf/dovecot`) mit folgendem Inhalt: 17 | ```bash 18 | plugin { 19 | # Kopiere alle gelöschten Mails in die .EXPUNGED Mailbox 20 | lazy_expunge = .EXPUNGED 21 | 22 | # Als gelöscht markierte Mails von der Quota ausschließen 23 | quota_rule = .EXPUNGED:ignore 24 | } 25 | 26 | # Definiert die .EXPUNGED Mailbox 27 | namespace inbox { 28 | mailbox .EXPUNGED { 29 | # Definiert, wie lange Mails in diesem Ordner bleiben sollen, bevor sie gelöscht werden. 30 | # Zeit wird definiert nach: https://doc.dovecot.org/2.3/settings/types/#time 31 | autoexpunge = 7days 32 | # Definiert, wie viele Mails maximal in der EXPUNGED Mailbox gehalten werden sollen, bevor diese geleert wird 33 | autoexpunge_max_mails = 100000 34 | } 35 | } 36 | ``` 37 | 38 | 2. Starten Sie den Dovecot-Container neu: 39 | 40 | === "docker compose (Plugin)" 41 | 42 | ```bash 43 | docker compose restart dovecot-mailcow 44 | ``` 45 | 46 | === "docker-compose (Standalone)" 47 | 48 | ```bash 49 | docker-compose restart dovecot-mailcow 50 | ``` 51 | 52 | 3. Nun sollte, wenn der Papierkorb geleert wird, ein neuer Ordner mit dem Namen `.EXPUNGED` erscheinen. In diesem Ordner sind die E-Mails enthalten, die gemäß der in Schritt 1 definierten Regeln nach einer gewissen Zeit automatisch vom Server gelöscht werden. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-lazy_expunge.en.md: -------------------------------------------------------------------------------- 1 | !!! danger 2 | This guide is still a work in progress, and errors may occur! Use this feature with caution! 3 | 4 | !!! info 5 | This feature is compatible with mailcow versions starting from 2024-11. Older versions are theoretically capable of using it as well, but due to internal changes, the implementation is more complicated, so it won't be stated here as unsupported. 6 | 7 | ## Introduction 8 | Dovecot has supported a feature called *Lazy Expunge* for [quite some time](https://doc.dovecot.org/2.3/configuration_manual/lazy_expunge_plugin/), which allows server administrators to temporarily retain deleted emails from a user account even after they have been deleted. 9 | 10 | mailcow also has a similar feature, but it is not easily accessible to users (see [Recover accidentally deleted data (Mail)](../../backup_restore/b_n_r-accidental_deletion.en.md#mail)) and serves more as a fallback method for administrators. 11 | 12 | With the Dovecot option, users can view and restore emails that have been marked as deleted before they are automatically purged by the Dovecot server. 13 | 14 | ## Setup 15 | 16 | 1. Edit the `extra.conf` file in the Dovecot configuration folder (usually located at `MAILCOW_ROOT/data/conf/dovecot`) with the following content: 17 | ```bash 18 | plugin { 19 | # Copy all deleted emails to the .EXPUNGED mailbox 20 | lazy_expunge = .EXPUNGED 21 | 22 | # Exclude marked-as-deleted emails from the quota 23 | quota_rule = .EXPUNGED:ignore 24 | } 25 | 26 | # Define the .EXPUNGED mailbox 27 | namespace inbox { 28 | mailbox .EXPUNGED { 29 | # Define how long emails will stay in this folder before they are deleted. Time is defined according to: https://doc.dovecot.org/2.3/settings/types/#time 30 | autoexpunge = 7days 31 | # Define how many emails can be kept in the EXPUNGED folder before it is cleared 32 | autoexpunge_max_mails = 100000 33 | } 34 | } 35 | ``` 36 | 37 | 2. Restart the Dovecot container: 38 | 39 | === "docker compose (Plugin)" 40 | 41 | ```bash 42 | docker compose restart dovecot-mailcow 43 | ``` 44 | 45 | === "docker-compose (Standalone)" 46 | 47 | ```bash 48 | docker-compose restart dovecot-mailcow 49 | ``` 50 | 51 | 3. Once the trash is emptied, a new folder named `.EXPUNGED` should appear. This folder will contain emails that, according to the rules defined in step 1, will be automatically deleted from the server after a certain period. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-mail-crypt.de.md: -------------------------------------------------------------------------------- 1 | !!! warning "Achtung" 2 | Die Mails werden komprimiert (lz4) und verschlüsselt gespeichert. Das Schlüsselpaar ist in crypt-vol-1 zu finden. 3 | 4 | Wenn Sie vorhandene maildir-Dateien entschlüsseln/verschlüsseln wollen, können Sie das folgende Skript auf eigene Gefahr verwenden: 5 | 6 | Wechseln Sie in den Dovecot Container, indem Sie folgenden Befehl im mailcow-dockerized Verzeichnis ausführen: 7 | 8 | === "docker compose (Plugin)" 9 | 10 | ``` bash 11 | docker compose exec dovecot-mailcow /bin/bash 12 | ``` 13 | 14 | === "docker-compose (Standalone)" 15 | 16 | ``` bash 17 | docker-compose exec dovecot-mailcow /bin/bash 18 | ``` 19 | 20 | 21 | ``` 22 | # Entschlüsseln Sie /var/vmail 23 | find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do 24 | if [[ $(head -c7 "$file") == "CRYPTED" ]]; then 25 | doveadm fs get compress lz4:1:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ 26 | "$file" > "/tmp/$(basename "$file")" 27 | if [[ -s "/tmp/$(basename "$file")" ]]; then 28 | chmod 600 "/tmp/$(basename "$file")" 29 | chown 5000:5000 "/tmp/$(basename "$file")" 30 | mv "/tmp/$(basename "$file")" "$file" 31 | else 32 | rm "/tmp/$(basename "$file")" 33 | fi 34 | fi 35 | done 36 | 37 | 38 | # Verschlüsseln von /var/vmail 39 | find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do 40 | if [[ $(head -c7 "$file") != "CRYPTED" ]]; then 41 | doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ 42 | "$file" "$file" 43 | chmod 600 "$file" 44 | chown 5000:5000 "$file" 45 | fi 46 | done 47 | ``` 48 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-mail-crypt.en.md: -------------------------------------------------------------------------------- 1 | !!! warning 2 | Mails are stored compressed (lz4) and encrypted. The key pair can be found in crypt-vol-1. 3 | 4 | If you want to decode/encode existing maildir files, you can use the following script at your own risk: 5 | 6 | Enter Dovecot by running the following command in the mailcow-dockerized location: 7 | 8 | === "docker compose (Plugin)" 9 | 10 | ``` bash 11 | docker compose exec dovecot-mailcow /bin/bash 12 | ``` 13 | 14 | === "docker-compose (Standalone)" 15 | 16 | ``` bash 17 | docker-compose exec dovecot-mailcow /bin/bash 18 | ``` 19 | 20 | ``` 21 | # Decrypt /var/vmail 22 | find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do 23 | if [[ $(head -c7 "$file") == "CRYPTED" ]]; then 24 | doveadm fs get compress lz4:1:crypt:private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ 25 | "$file" > "/tmp/$(basename "$file")" 26 | if [[ -s "/tmp/$(basename "$file")" ]]; then 27 | chmod 600 "/tmp/$(basename "$file")" 28 | chown 5000:5000 "/tmp/$(basename "$file")" 29 | mv "/tmp/$(basename "$file")" "$file" 30 | else 31 | rm "/tmp/$(basename "$file")" 32 | fi 33 | fi 34 | done 35 | 36 | # Encrypt /var/vmail 37 | find /var/vmail/ -type f -regextype egrep -regex '.*S=.*W=.*' | while read -r file; do 38 | if [[ $(head -c7 "$file") != "CRYPTED" ]]; then 39 | doveadm fs put crypt private_key_path=/mail_crypt/ecprivkey.pem:public_key_path=/mail_crypt/ecpubkey.pem:posix:prefix=/ \ 40 | "$file" "$file" 41 | chmod 600 "$file" 42 | chown 5000:5000 "$file" 43 | fi 44 | done 45 | ``` 46 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-more.de.md: -------------------------------------------------------------------------------- 1 | Hier ist nur eine unsortierte Liste von nützlichen `doveadm`-Befehlen, die nützlich sein könnten. 2 | 3 | ## doveadm quota 4 | 5 | Die Befehle `quota get` und `quota recalc`[^1] werden verwendet, um die Quota-Nutzung des aktuellen Benutzers anzuzeigen oder neu zu berechnen. Die angezeigten Werte sind in *Kilobytes*. 6 | 7 | Um den aktuellen Quota-Status für einen Benutzer / eine Mailbox aufzulisten, tun Sie folgendes: 8 | 9 | ``` 10 | doveadm quota get -u 'mailbox@example.org' 11 | ``` 12 | 13 | Um den Quota-Speicherwert für **alle** Benutzer aufzulisten, tun Sie folgendes: 14 | 15 | ``` 16 | doveadm quota get -A |grep "STORAGE" 17 | ``` 18 | 19 | Berechnen Sie die Quota-Nutzung eines einzelnen Benutzers neu: 20 | 21 | ``` 22 | doveadm quota recalc -u 'mailbox@example.org' 23 | ``` 24 | 25 | ## doveadm search 26 | 27 | Der Befehl `doveadm search`[^2] wird verwendet, um Nachrichten zu finden, die Ihrer Anfrage entsprechen. Er kann den Benutzernamen, die Mailbox-GUID / -UID und die Nachrichten-GUIDs / -UIDs zurückgeben. 28 | 29 | Um die Anzahl der Nachrichten im **.Trash** Ordner eines Benutzers zu sehen: 30 | 31 | ``` 32 | doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c 33 | ``` 34 | 35 | Alle Nachrichten im **Postfach** eines Benutzers anzeigen, die älter als 90 Tage sind: 36 | 37 | ``` 38 | doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d 39 | ``` 40 | 41 | Zeige **alle Nachrichten** in **beliebigen Ordnern**, die **älter** sind als 30 Tage für `mailbox@example.org`: 42 | 43 | ``` 44 | doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d 45 | ``` 46 | 47 | [^1]:https://wiki.dovecot.org/Tools/Doveadm/Quota 48 | [^2]:https://wiki.dovecot.org/Tools/Doveadm/Search -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-more.en.md: -------------------------------------------------------------------------------- 1 | Here is just an unsorted list of useful `doveadm` commands that could be useful. 2 | 3 | ## doveadm quota 4 | 5 | The `quota get` and `quota recalc`[^1] commands are used to display or recalculate the current user's quota usage. The reported values are in *kilobytes*. 6 | 7 | To list the current quota status for a user / mailbox, do: 8 | 9 | ``` 10 | doveadm quota get -u 'mailbox@example.org' 11 | ``` 12 | 13 | To list the quota storage value for **all** users, do: 14 | 15 | ``` 16 | doveadm quota get -A |grep "STORAGE" 17 | ``` 18 | 19 | Recalculate a single user's quota usage: 20 | 21 | ``` 22 | doveadm quota recalc -u 'mailbox@example.org' 23 | ``` 24 | 25 | ## doveadm search 26 | 27 | The `doveadm search`[^2] command is used to find messages matching your query. It can return the username, mailbox-GUID / -UID and message-GUIDs / -UIDs. 28 | 29 | To view the number of messages, by user, in their **.Trash** folder: 30 | 31 | ``` 32 | doveadm search -A mailbox 'Trash' | awk '{print $1}' | sort | uniq -c 33 | ``` 34 | 35 | Show all messages in a user's **inbox** older then 90 days: 36 | 37 | ``` 38 | doveadm search -u 'mailbox@example.org' mailbox 'INBOX' savedbefore 90d 39 | ``` 40 | 41 | Show **all messages** in **any folder** that are **older** then 30 days for `mailbox@example.org`: 42 | 43 | ``` 44 | doveadm search -u 'mailbox@example.org' mailbox "*" savedbefore 30d 45 | ``` 46 | 47 | [^1]:https://wiki.dovecot.org/Tools/Doveadm/Quota 48 | [^2]:https://wiki.dovecot.org/Tools/Doveadm/Search -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-performance.de.md: -------------------------------------------------------------------------------- 1 | ## maildir_very_dirty_syncs 2 | 3 | Dovecot's [`maildir_very_dirty_syncs`](https://wiki.dovecot.org/MailLocation/Maildir#Optimizations) Option ist seit mailcow Release 2023-05 standardmäßig aktiviert. Diese Option kann die Leistung von Postfächern, die sehr große Ordner (über 100.000 E-Mails) enthalten, erheblich verbessern. 4 | 5 | Mit dieser Option wird vermieden, dass beim Laden einer E-Mail das gesamte `cur`-Verzeichnis erneut durchsucht wird. Wenn diese Option deaktiviert ist, geht Dovecot auf Nummer sicher und durchsucht das **gesamte** `cur`-Verzeichnis (vergleichbar mit dem Ausführen eines `ls`), um zu prüfen, ob diese bestimmte E-Mail berührt (umbenannt, etc.) wurde, indem es nach allen Dateien sucht, deren Namen die richtige ID enthalten. Dies ist sehr langsam, wenn das Verzeichnis groß ist, selbst auf Dateisystemen, die für solche Anwendungsfälle optimiert sind (wie ext4 mit aktiviertem `dir_index`) auf schnellen SSD-Laufwerken. 6 | 7 | Diese Option ist sicher, solange Sie Dateien unter `cur` nicht manuell anfassen (da Dovecot die Änderungen dann möglicherweise nicht bemerkt). Auch wenn diese Option aktiviert ist, wird Dovecot Änderungen bemerken, wenn die mtime (last modified time) der Datei geändert wurde, aber ansonsten wird das Verzeichnis nicht gescannt und es wird einfach angenommen, dass der Index aktuell ist. Dies entspricht im Wesentlichen dem, was sdbox/mdbox tun, und mit dieser Option können Sie einen Teil der Leistungssteigerung erhalten, die mit sdbox/mdbox einhergehen würde, während Sie weiterhin maildir verwenden. 8 | 9 | Diese Option ist bei einer Standard-mailcow-Installation sicher zu verwenden. Wenn Sie jedoch Tools von Drittanbietern verwenden, die manuell Dateien direkt im Maildir modifizieren (anstatt über IMAP), möchten Sie diese Option vielleicht deaktivieren. Um diese Option zu deaktivieren, [erstellen Sie eine data/conf/dovecot/extra.conf Datei](./u_e-dovecot-extra_conf.de.md) und fügen Sie diese Einstellung hinzu: 10 | 11 | ```ini 12 | maildir_very_dirty_syncs=no 13 | ``` 14 | 15 | !!! warning "Achtung" 16 | Bitte nutzen Sie für eigene Anpassungen **IMMER**, die oben erwähnte [`extra.conf`](./u_e-dovecot-extra_conf.de.md), da Änderungen, welche in der normalen `dovecot.conf` geändert werden möglicherweise _nach einem Update vom GitHub Quellcode_ überschrieben werden. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-performance.en.md: -------------------------------------------------------------------------------- 1 | ## maildir_very_dirty_syncs 2 | 3 | Dovecot's [`maildir_very_dirty_syncs` option](https://wiki.dovecot.org/MailLocation/Maildir#Optimizations) is enabled by default since mailcow Release 2023-05. This option can significantly improve the performance of mailboxes that contain very large folders (over 100,000 emails). 4 | 5 | What this option does is it avoids rescanning the entire `cur` directory whenever loading an email. With this option disabled, Dovecot takes it safe and scans the **entire** `cur` directory (comparable with running an `ls`) to check if that particular email was touched (renamed, etc), by looking for all files whose names contain the correct ID. This is very slow if the directory is large, even on filesystems optimized for such use cases (such as ext4 with `dir_index` enabled) on fast SSD drives. 6 | 7 | This option is safe to use as long as you do not manually touch files under `cur` (as then Dovecot may not notice the changes). Even with this option enabled, Dovecot will still notice changes if the file's mtime (last modified time) is changed, but otherwise it will not scan the directory and just assumes the index is up-to-date. This is essentially the same as what sdbox/mdbox do, and with this option you can get some of the performance increase that would come with sdbox/mdbox while still using maildir. 8 | 9 | This option is safe to use on a standard Mailcow installation. However, if you use any third-party tools that manually modify files directly in the maildir (rather than via IMAP), you may wish to disable it. To disable this option, [create a data/conf/dovecot/extra.conf file](./u_e-dovecot-extra_conf.en.md) and add this setting to it: 10 | 11 | ```ini 12 | maildir_very_dirty_syncs=no 13 | ``` 14 | 15 | !!! warning 16 | Please **ALWAYS** use the above mentioned [`extra.conf`](./u_e-dovecot-extra_conf.en.md) for your own customizations, as changes made in the normal `dovecot.conf` might be overwritten _after an update from GitHub source code_. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-public_folder.de.md: -------------------------------------------------------------------------------- 1 | Erstellen Sie einen neuen öffentlichen Namespace "Public" und eine Mailbox "Develcow" innerhalb dieses Namespaces: 2 | 3 | Bearbeiten oder erstellen Sie `data/conf/dovecot/extra.conf`, fügen Sie hinzu: 4 | 5 | ``` 6 | namespace { 7 | type = public 8 | separator = / 9 | prefix = Public/ 10 | location = maildir:/var/vmail/public:INDEXPVT=~/public 11 | subscriptions = yes 12 | mailbox "Develcow" { 13 | auto = subscribe 14 | } 15 | } 16 | ``` 17 | 18 | `:INDEXPVT=~/public` kann weggelassen werden, wenn die Flags, die pro Benutzer gesehen werden, nicht gewünscht sind. 19 | 20 | Die neue Mailbox im öffentlichen Namensraum wird von den Benutzern automatisch abonniert. 21 | 22 | Um allen authentifizierten Benutzern vollen Zugriff auf das neue Postfach (nicht auf den gesamten Namespace) zu gewähren, führen Sie aus: 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | docker compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create 28 | ``` 29 | 30 | === "docker-compose (Standalone)" 31 | 32 | ``` bash 33 | docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create 34 | ``` 35 | 36 | Passen Sie den Befehl an Ihre Bedürfnisse an, wenn Sie detailliertere Rechte pro Benutzer vergeben möchten (verwenden Sie z.B. `-u user@domain` anstelle von `-A`). 37 | 38 | ## Erlaube authentifizierten Benutzern den Zugriff auf den gesamten öffentlichen Namespace 39 | 40 | Um allen authentifizierten Benutzern vollen Zugriff auf den gesamten öffentlichen Namespace und seine Unterordner zu gewähren, erstellen Sie eine neue Datei `dovecot-acl` im Namespace-Stammverzeichnis: 41 | 42 | Öffnen/bearbeiten/erstellen Sie `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl` (passen Sie den Pfad entsprechend an), um die globale ACL-Datei mit dem folgenden Inhalt zu erstellen: 43 | 44 | ``` 45 | authenticated kxeilprwts 46 | ``` 47 | 48 | kxeilprwts" ist gleichbedeutend mit "lookup read write write-seen write-deleted insert post delete expunge create". 49 | 50 | Sie können `doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read` verwenden, um den Zugriff für einen einzelnen Benutzer zu beschränken. Sie können es auch umdrehen und den Zugriff für alle Benutzer auf "lr" beschränken und nur einigen Benutzern vollen Zugriff gewähren. 51 | 52 | Siehe [Dovecot ACL](https://doc.dovecot.org/configuration_manual/acl/) für weitere Informationen über ACL. 53 | 54 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-public_folder.en.md: -------------------------------------------------------------------------------- 1 | Create a new public namespace "Public" and a mailbox "Develcow" inside that namespace: 2 | 3 | Edit or create `data/conf/dovecot/extra.conf`, add: 4 | 5 | ``` 6 | namespace { 7 | type = public 8 | separator = / 9 | prefix = Public/ 10 | location = maildir:/var/vmail/public:INDEXPVT=~/public 11 | subscriptions = yes 12 | mailbox "Develcow" { 13 | auto = subscribe 14 | } 15 | } 16 | ``` 17 | 18 | `:INDEXPVT=~/public` can be omitted if per-user seen flags are not wanted. 19 | 20 | The new mailbox in the public namespace will be auto-subscribed by users. 21 | 22 | To allow all authenticated users access full to that new mailbox (not the whole namespace), run: 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | docker compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create 28 | ``` 29 | 30 | === "docker-compose (Standalone)" 31 | 32 | ``` bash 33 | docker-compose exec dovecot-mailcow doveadm acl set -A "Public/Develcow" "authenticated" lookup read write write-seen write-deleted insert post delete expunge create 34 | ``` 35 | 36 | 37 | Adjust the command to your needs if you like to assign more granular rights per user (use `-u user@domain` instead of `-A` for example). 38 | 39 | ## Allow authenticated users access to the whole public namespace 40 | 41 | To allow all authenticated users access full access to the whole public namespace and its subfolders, create a new `dovecot-acl` file in the namespace root directory: 42 | 43 | Open/edit/create `/var/lib/docker/volumes/mailcowdockerized_vmail-vol-1/_data/public/dovecot-acl` (adjust the path accordingly) to create the global ACL file with the following content: 44 | 45 | ``` 46 | authenticated kxeilprwts 47 | ``` 48 | 49 | `kxeilprwts` equals to `lookup read write write-seen write-deleted insert post delete expunge create`. 50 | 51 | You can use `doveadm acl set -u user@domain "Public/Develcow" user=user@domain lookup read` to limit access for a single user. You may also turn it around to limit access for all users to "lr" and grant only some users full access. 52 | 53 | See [Dovecot ACL](https://doc.dovecot.org/configuration_manual/acl/) for further information about ACL. 54 | -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-static_master.de.md: -------------------------------------------------------------------------------- 1 | Zufällige Master-Benutzernamen und Passwörter werden automatisch bei jedem Neustart von dovecot-mailcow erstellt. 2 | 3 | **Das wird empfohlen und sollte nicht geändert werden.** 4 | 5 | Wenn der Benutzer trotzdem statisch sein soll, geben Sie bitte zwei Variablen in `mailcow.conf` an. 6 | 7 | **Beide** Parameter dürfen nicht leer sein! 8 | 9 | ``` 10 | DOVECOT_MASTER_USER=mymasteruser 11 | DOVECOT_MASTER_PASS=mysecretpass 12 | ``` 13 | 14 | Führen Sie folgenden Befehl aus, um Ihre Änderungen zu übernehmen: 15 | 16 | === "docker compose (Plugin)" 17 | 18 | ``` bash 19 | docker compose up -d 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose up -d 26 | ``` 27 | 28 | 29 | Der statische Master-Benutzername wird zu `DOVECOT_MASTER_USER@mailcow.local` erweitert. 30 | 31 | Um sich als `test@example.org` anzumelden, würde dies `test@example.org*mymasteruser@mailcow.local` mit dem oben angegebenen Passwort entsprechen. 32 | 33 | Eine Anmeldung bei SOGo ist mit diesem Benutzernamen nicht möglich. Für Admins steht eine Click-to-Login-Funktion für SOGo zur Verfügung, wie [hier] beschrieben (https://docs.mailcow.email/debug-admin_login_sogo/) 34 | Es wird kein Hauptbenutzer benötigt. -------------------------------------------------------------------------------- /docs/manual-guides/Dovecot/u_e-dovecot-static_master.en.md: -------------------------------------------------------------------------------- 1 | Random master usernames and passwords are automatically created on every restart of dovecot-mailcow. 2 | 3 | **That's recommended and should not be changed.** 4 | 5 | If you need the user to be static anyway, please specify two variables in `mailcow.conf`. 6 | 7 | **Both** parameters must not be empty! 8 | 9 | ``` 10 | DOVECOT_MASTER_USER=mymasteruser 11 | DOVECOT_MASTER_PASS=mysecretpass 12 | ``` 13 | 14 | Run the command below to apply your changes: 15 | 16 | === "docker compose (Plugin)" 17 | 18 | ``` bash 19 | docker compose up -d 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose up -d 26 | ``` 27 | 28 | The static master username will be expanded to `DOVECOT_MASTER_USER@mailcow.local`. 29 | 30 | To login as `test@example.org` this would equal to `test@example.org*mymasteruser@mailcow.local` with the specified password above. 31 | 32 | A login to SOGo is not possible with this username. A click-to-login function for SOGo is available for admins as described [here](https://docs.mailcow.email/debug-admin_login_sogo/) 33 | No master user is required. -------------------------------------------------------------------------------- /docs/manual-guides/Nginx/u_e-nginx_webmail-site.de.md: -------------------------------------------------------------------------------- 1 | **WICHTIG**: Diese Anleitung gilt nur für Konfigurationen, bei denen SNI nicht aktiviert ist. Wenn SNI aktiviert ist, muss der Zertifikatspfad angepasst werden. Etwas wie `ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;` wird genügen. **Aber**: Das Zertifikat sollte **zuerst** bezogen werden und erst wenn das Zertifikat existiert, sollte eine Site Config erstellt werden. Nginx wird nicht starten, wenn es das Zertifikat und den Schlüssel nicht finden kann. 2 | 3 | Um eine Subdomain `webmail.example.org` zu erstellen und sie auf SOGo umzuleiten, müssen Sie eine **neue** Nginx-Site erstellen. Achten Sie dabei auf "CHANGE_TO_MAILCOW_HOSTNAME"! 4 | 5 | **nano data/conf/nginx/webmail.conf** 6 | 7 | ``` hl_lines="9 17" 8 | server { 9 | ssl_certificate /etc/ssl/mail/cert.pem; 10 | ssl_certificate_key /etc/ssl/mail/key.pem; 11 | index index.php index.html; 12 | client_max_body_size 0; 13 | root /web; 14 | include /etc/nginx/conf.d/listen_plain.active; 15 | include /etc/nginx/conf.d/listen_ssl.active; 16 | server_name webmail.example.org; 17 | server_tokens off; 18 | location ^~ /.well-known/acme-challenge/ { 19 | allow all; 20 | default_type "text/plain"; 21 | } 22 | 23 | location / { 24 | return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo; 25 | } 26 | } 27 | ``` 28 | 29 | Speichern Sie und starten Sie Nginx neu: 30 | 31 | === "docker compose (Plugin)" 32 | 33 | ``` bash 34 | docker compose restart nginx-mailcow 35 | ``` 36 | 37 | === "docker-compose (Standalone)" 38 | 39 | ``` bash 40 | docker-compose restart nginx-mailcow 41 | ``` 42 | 43 | Öffnen Sie nun `mailcow.conf` und suchen Sie `ADDITIONAL_SAN`. 44 | Fügen Sie `webmail.example.org` zu diesem Array hinzu, verwenden Sie keine Anführungszeichen! 45 | 46 | ``` 47 | ADDITIONAL_SAN=webmail.example.org 48 | ``` 49 | 50 | Führen Sie den Befehl aus: 51 | 52 | === "docker compose (Plugin)" 53 | 54 | ``` bash 55 | docker compose up -d 56 | ``` 57 | 58 | === "docker-compose (Standalone)" 59 | 60 | ``` bash 61 | docker-compose up -d 62 | ``` 63 | 64 | Siehe "acme-mailcow" und "nginx-mailcow" Logs, wenn etwas fehlschlägt -------------------------------------------------------------------------------- /docs/manual-guides/Nginx/u_e-nginx_webmail-site.en.md: -------------------------------------------------------------------------------- 1 | **IMPORTANT**: This guide only applies to non SNI enabled configurations. The certificate path needs to be adjusted if SNI is enabled. Something like `ssl_certificate,key /etc/ssl/mail/webmail.example.org/cert.pem,key.pem;` will do. **But**: The certificate should be acquired **first** and only after the certificate exists a site config should be created. Nginx will fail to start if it cannot find the certificate and key. 2 | 3 | To create a subdomain `webmail.example.org` and redirect it to SOGo, you need to create a **new** Nginx site. Take care of "CHANGE_TO_MAILCOW_HOSTNAME"! 4 | 5 | **nano data/conf/nginx/webmail.conf** 6 | 7 | ``` hl_lines="9 17" 8 | server { 9 | ssl_certificate /etc/ssl/mail/cert.pem; 10 | ssl_certificate_key /etc/ssl/mail/key.pem; 11 | index index.php index.html; 12 | client_max_body_size 0; 13 | root /web; 14 | include /etc/nginx/conf.d/listen_plain.active; 15 | include /etc/nginx/conf.d/listen_ssl.active; 16 | server_name webmail.example.org; 17 | server_tokens off; 18 | location ^~ /.well-known/acme-challenge/ { 19 | allow all; 20 | default_type "text/plain"; 21 | } 22 | 23 | location / { 24 | return 301 https://CHANGE_TO_MAILCOW_HOSTNAME/SOGo; 25 | } 26 | } 27 | ``` 28 | 29 | Save and restart Nginx: 30 | 31 | === "docker compose (Plugin)" 32 | 33 | ``` bash 34 | docker compose restart nginx-mailcow 35 | ``` 36 | 37 | === "docker-compose (Standalone)" 38 | 39 | ``` bash 40 | docker-compose restart nginx-mailcow 41 | ``` 42 | 43 | Now open `mailcow.conf` and find `ADDITIONAL_SAN`. 44 | Add `webmail.example.org` to this array, don't use quotes! 45 | 46 | ``` 47 | ADDITIONAL_SAN=webmail.example.org 48 | ``` 49 | 50 | Run the command to apply the changes: 51 | 52 | === "docker compose (Plugin)" 53 | 54 | ``` bash 55 | docker compose up -d 56 | ``` 57 | 58 | === "docker-compose (Standalone)" 59 | 60 | ``` bash 61 | docker-compose up -d 62 | ``` 63 | 64 | See "acme-mailcow" and "nginx-mailcow" logs if anything fails. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-attachment_size.de.md: -------------------------------------------------------------------------------- 1 | Öffnen Sie `data/conf/postfix/extra.cf` und setzen Sie das `message_size_limit` entsprechend in Bytes. Siehe `main.cf` für den Standardwert. 2 | 3 | Sie müssen auch die Nachrichtengröße in den Konfigurationen von Rspamd und Clamav anpassen: 4 | 5 | + in `data/conf/rspamd/local.d/options.inc` fügen Sie den `max_message` Parameter entsprechend den im Postfix gesetzten Wert hinzu. Ziehen Sie die [Rspamd Docs](https://rspamd.com/doc/configuration/options.html#:~:text=DoS%20(default%3A%201024)-,max_message,-maximum%20size%20of) für den Standardwert zu rate. 6 | + in `data/conf/rspamd/local.d/external_services.conf` ändern Sie den Wert `max_size` Parameter für `oletools` 7 | + in `data/conf/rspamd/local.d/antivirus.conf` ändern Sie den Wert `max_size` Parameter für `clamav` 8 | + in `data/conf/clamav/clamd.conf` ändern Sie den Wert `MaxScanSize` und `MaxFileSize` auf dieselbe Größe wie in der Postfix `extra.cf` 9 | 10 | Starten Sie Postfix, Rspamd and Clamav neu: 11 | === "docker compose (Plugin)" 12 | 13 | ``` bash 14 | docker compose restart postfix-mailcow rspamd-mailcow clamd-mailcow 15 | ``` 16 | 17 | === "docker-compose (Standalone)" 18 | 19 | ``` bash 20 | docker-compose restart postfix-mailcow rspamd-mailcow clamd-mailcow 21 | ``` 22 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-attachment_size.en.md: -------------------------------------------------------------------------------- 1 | Open `data/conf/postfix/extra.cf` and set the `message_size_limit` accordingly in bytes. See `main.cf` for the default value. 2 | 3 | You will also need to adjust message size in Rspamd and Clamav configurations: 4 | 5 | + in `data/conf/rspamd/local.d/options.inc` add `max_message` parameter, check [Rspamd Docs](https://rspamd.com/doc/configuration/options.html#:~:text=DoS%20(default%3A%201024)-,max_message,-maximum%20size%20of) for defaults 6 | + in `data/conf/rspamd/local.d/external_services.conf` adjust `max_size` parameter for `oletools` 7 | + in `data/conf/rspamd/local.d/antivirus.conf` adjust `max_size` parameter for `clamav` 8 | + in `data/conf/clamav/clamd.conf` adjust `MaxScanSize` and `MaxFileSize` 9 | 10 | 11 | Restart Postfix, Rspamd and Clamav: 12 | === "docker compose (Plugin)" 13 | 14 | ``` bash 15 | docker compose restart postfix-mailcow rspamd-mailcow clamd-mailcow 16 | ``` 17 | 18 | === "docker-compose (Standalone)" 19 | 20 | ``` bash 21 | docker-compose restart postfix-mailcow rspamd-mailcow clamd-mailcow 22 | ``` 23 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-custom_transport.de.md: -------------------------------------------------------------------------------- 1 | Für Transport maps, die nicht in mailcow UI konfiguriert werden, verwenden Sie bitte `data/conf/postfix/custom_transport.pcre`, um zu verhindern, dass bestehende Maps oder Einstellungen durch Updates überschrieben werden. 2 | 3 | In den meisten Fällen ist die Verwendung dieser Datei **nicht** notwendig. Bitte vergewissern Sie sich, dass mailcow UI nicht in der Lage ist, den gewünschten Datenverkehr richtig zu routen, bevor Sie diese Datei verwenden. 4 | 5 | Die Datei benötigt gültigen PCRE-Inhalt und kann Postfix zerstören, wenn sie falsch konfiguriert ist. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-custom_transport.en.md: -------------------------------------------------------------------------------- 1 | For transport maps other than those to be configured in mailcow UI, please use `data/conf/postfix/custom_transport.pcre` to prevent existing maps or settings from being overwritten by updates. 2 | 3 | In most cases using this file is **not** necessary. Please make sure mailcow UI is not able to route your desired traffic properly before using that file. 4 | 5 | The file needs valid PCRE content and can break Postfix, if configured incorrectly. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-disable_sender_verification.de.md: -------------------------------------------------------------------------------- 1 | ## Neue Anleitung 2 | 3 | Bearbeiten Sie ein Postfach und wählen Sie "Senden als * zulassen". 4 | 5 | Aus historischen Gründen haben wir die alte und veraltete Anleitung unten beibehalten: 6 | 7 | ## Veraltete Anleitung (NICHT FÜR NEUERE MAILCOWS VERWENDEN!) 8 | 9 | Diese Option ist keine Best-Practice und sollte nur verwendet werden, wenn es keine andere Möglichkeit gibt, das zu erreichen, was Sie erreichen wollen. 10 | 11 | Erstellen Sie einfach eine Datei `data/conf/postfix/check_sasl_access` und tragen Sie den folgenden Inhalt ein. Dieser Benutzer muss in Ihrer Installation existieren und muss sich vor dem Versenden von Mails authentifizieren. 12 | ``` 13 | user-to-allow-everything@example.com OK 14 | ``` 15 | 16 | Öffnen Sie `data/conf/postfix/main.cf` und suchen Sie `smtpd_sender_restrictions`. Fügen Sie `check_sasl_access hash:/opt/postfix/conf/check_sasl_access` wie folgt ein: 17 | ``` 18 | smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...] 19 | ``` 20 | 21 | Postmap auf check_sasl_access ausführen: 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access 32 | ``` 33 | 34 | Starten Sie den Postfix-Container neu. 35 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-disable_sender_verification.en.md: -------------------------------------------------------------------------------- 1 | ## New guide 2 | 3 | Edit a mailbox and select "Allow to send as *". 4 | 5 | For historical reasons we kept the old and deprecated guide below: 6 | 7 | ## Deprecated guide (DO NOT USE ON NEWER MAILCOWS!) 8 | 9 | This option is not best-practice and should only be implemented when there is no other option available to achieve whatever you are trying to do. 10 | 11 | Simply create a file `data/conf/postfix/check_sasl_access` and enter the following content. This user must exist in your installation and needs to authenticate before sending mail. 12 | ``` 13 | user-to-allow-everything@example.com OK 14 | ``` 15 | 16 | Open `data/conf/postfix/main.cf` and find `smtpd_sender_restrictions`. Prepend `check_sasl_access hash:/opt/postfix/conf/check_sasl_access` like this: 17 | ``` 18 | smtpd_sender_restrictions = check_sasl_access hash:/opt/postfix/conf/check_sasl_access reject_authenticated_sender_login_mismatch [...] 19 | ``` 20 | 21 | Run postmap on check_sasl_access: 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose exec postfix-mailcow postmap /opt/postfix/conf/check_sasl_access 32 | ``` 33 | 34 | Restart the Postfix container. 35 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-extra_cf.de.md: -------------------------------------------------------------------------------- 1 | Bitte erstellen Sie eine neue Datei `data/conf/postfix/extra.cf` für Überschreibungen oder zusätzliche Inhalte zur `main.cf`. 2 | 3 | Postfix wird sich einmal nach dem Start von postfix-mailcow über doppelte Werte beschweren, dies ist beabsichtigt. 4 | 5 | Syslog-ng wurde so konfiguriert, dass es diese Warnungen ausblendet, während Postfix läuft, um die Log-Dateien nicht jedes Mal mit unnötigen Informationen zu spammen, wenn ein Dienst benutzt wird. 6 | 7 | Starten Sie `postfix-mailcow` neu, um Ihre Änderungen zu übernehmen: 8 | 9 | === "docker compose (Plugin)" 10 | 11 | ``` bash 12 | docker compose restart postfix-mailcow 13 | ``` 14 | 15 | === "docker-compose (Standalone)" 16 | 17 | ``` bash 18 | docker-compose restart postfix-mailcow 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-extra_cf.en.md: -------------------------------------------------------------------------------- 1 | Please create a new file `data/conf/postfix/extra.cf` for overrides or additional content to `main.cf`. 2 | 3 | Postfix will complain about duplicate values once after starting `postfix-mailcow`, this is intended. 4 | 5 | Syslog-ng was configured to hide those warnings while Postfix is running, to not spam the log files with unnecessary information every time a service is used. 6 | 7 | Restart `postfix-mailcow` to apply your changes: 8 | 9 | === "docker compose (Plugin)" 10 | 11 | ``` bash 12 | docker compose restart postfix-mailcow 13 | ``` 14 | 15 | === "docker-compose (Standalone)" 16 | 17 | ``` bash 18 | docker-compose restart postfix-mailcow 19 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-harden_ciphers.de.md: -------------------------------------------------------------------------------- 1 | Wenn Sie die Standard-Cipher und TLS-Versionen, die in Postfix akzeptiert werden, entsprechend der aktuellen Version auf stärkere Einstellungen ändern möchten, können Sie Folgendes zu Postfix [extra.cf](u_e-postfix-extra_cf.de.md) hinzufügen: 2 | 3 | ```bash 4 | tls_high_cipherlist = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256 5 | tls_preempt_cipherlist = yes 6 | 7 | smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 8 | smtp_tls_ciphers = high 9 | smtp_tls_mandatory_ciphers = high 10 | 11 | smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 12 | smtpd_tls_ciphers = high 13 | smtpd_tls_mandatory_ciphers = high 14 | ``` 15 | 16 | Eine solche Konfiguration wird die aktuellen (2024-10-21) Konfigurationsprüfungen bei Diensten wie Internet.nl bestehen. 17 | 18 | Falls Sie auch die Cipher für Dovecot anpassen wollen finden Sie [hier](../Dovecot/u_e-dovecot-harden_ciphers.de.md) eine entsprechende Anleitung. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-harden_ciphers.en.md: -------------------------------------------------------------------------------- 1 | If you want to change the default ciphers and TLS versions accepted in postfix as per it's current release to something stronger, you could add following inside Postfix [extra.cf](u_e-postfix-extra_cf.en.md): 2 | 3 | ```bash 4 | tls_high_cipherlist = ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256 5 | tls_preempt_cipherlist = yes 6 | 7 | smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 8 | smtp_tls_ciphers = high 9 | smtp_tls_mandatory_ciphers = high 10 | 11 | smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1 12 | smtpd_tls_ciphers = high 13 | smtpd_tls_mandatory_ciphers = high 14 | ``` 15 | 16 | Such a configuration will pass current (2024-10-21) configuration checks against services like Internet.nl. 17 | 18 | If you want to adjust the ciphers for Dovecot as well you can find the corresponding tutorial [here](../Dovecot/u_e-dovecot-harden_ciphers.en.md). -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-pflogsumm.de.md: -------------------------------------------------------------------------------- 1 | Um pflogsumm mit dem Standard-Logging-Treiber zu verwenden, müssen wir postfix-mailcow über docker logs abfragen und die Ausgabe zu pflogsumm leiten: 2 | 3 | ``` 4 | docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm 5 | ``` 6 | 7 | Die obige Log-Ausgabe ist auf die letzten 24 Stunden beschränkt. 8 | 9 | Es ist auch möglich, einen täglichen pflogsumm-Bericht über cron zu erstellen. Erstellen Sie die Datei /etc/cron.d/pflogsumm mit dem folgenden Inhalt: 10 | 11 | ``` 12 | SHELL=/bin/bash 13 | 59 23 * * * root docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | /usr/sbin/pflogsumm -d today | mail -s "Postfix Report of $(date)" postmaster@example.net 14 | ``` 15 | 16 | Um zu funktionieren muss ein lokaler Postfix auf dem Server installiert werden, welcher an den Postfix der mailcow relayed. 17 | 18 | !!! question "Frage" 19 | Genauere Informationen lassen sich unter Sektion [Post-Installationsaufgaben -> Lokaler MTA auf Dockerhost](../../post_installation/firststeps-local_mta.de.md) finden. 20 | 21 | Basierend auf den Postfix-Logs der letzten 24 Stunden sendet dieses Beispiel dann jeden Tag um 23:59:00 Uhr einen pflogsumm-Bericht an postmaster@example.net. 22 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-pflogsumm.en.md: -------------------------------------------------------------------------------- 1 | To use pflogsumm with the default logging driver, we need to query postfix-mailcow via docker logs and direct the output to pflogsumm: 2 | 3 | ``` 4 | docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | pflogsumm 5 | ``` 6 | 7 | The above log output is limited to the last 24 hours. 8 | 9 | It is also possible to create a daily pflogsumm report via cron. Create the /etc/cron.d/pflogsumm file with the following content: 10 | 11 | ``` 12 | SHELL=/bin/bash 13 | 59 23 * * * root docker logs --since 24h $(docker ps -qf name=postfix-mailcow) | /usr/sbin/pflogsumm -d today | mail -s "Postfix Report of $(date)" postmaster@example.net 14 | ``` 15 | 16 | To work, a local postfix must be installed on the server, which relays to the mailcow postfix. 17 | 18 | !!! question 19 | More detailed information can be found in section [Post installation tasks -> Local MTA on Dockerhost](../../post_installation/firststeps-local_mta.en.md). 20 | 21 | Based on the postfix logs of the last 24 hours, this example then sends a pflogsumm report to postmaster@example.net every day at 23:59:00. 22 | -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-postscreen_whitelist.de.md: -------------------------------------------------------------------------------- 1 | IPs können in der Datei `data/conf/postfix/custom_postscreen_whitelist.cidr` aus dem Postscreen und damit _auch_ aus den RBL-Prüfungen entfernt werden. 2 | 3 | Postscreen führt mehrere Prüfungen durch, um bösartige Absender zu identifizieren. In den meisten Fällen möchten Sie eine IP-Adresse auf die Whitelist setzen, um sie von der Suche nach einer Blacklist auszuschließen. 4 | 5 | Das Format der Datei ist wie folgt 6 | 7 | `CIDR ACTION` 8 | 9 | Dabei steht CIDR für eine einzelne IP-Adresse oder einen IP-Bereich in CIDR-Notation und action entweder für "permit" oder "reject". 10 | 11 | Beispiel: 12 | 13 | ``` 14 | # Regeln werden in der angegebenen Reihenfolge ausgewertet. 15 | # Blacklist 192.168.* außer 192.168.0.1. 16 | 192.168.0.1 permit 17 | 192.168.0.0/16 reject 18 | ``` 19 | 20 | Die Datei wird spontan neu geladen, ein Neustart von Postfix ist nicht erforderlich. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-postscreen_whitelist.en.md: -------------------------------------------------------------------------------- 1 | IPs can be removed from Postscreen and therefore _also_ from RBL checks in `data/conf/postfix/custom_postscreen_whitelist.cidr`. 2 | 3 | Postscreen does multiple checks to identify malicious senders. In most cases you want to whitelist an IP to exclude it from blacklist lookups. 4 | 5 | The format of the file is as follows: 6 | 7 | `CIDR ACTION` 8 | 9 | Where CIDR is a single IP address or IP range in CIDR notation, and action is either "permit" or "reject". 10 | 11 | Example: 12 | 13 | ``` 14 | # Rules are evaluated in the order as specified. 15 | # Blacklist 192.168.* except 192.168.0.1. 16 | 192.168.0.1 permit 17 | 192.168.0.0/16 reject 18 | ``` 19 | 20 | The file is reloaded on the fly, postfix restart is not required. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-relayhost.de.md: -------------------------------------------------------------------------------- 1 | Seit dem 12. September 2018 können Sie Relayhosts als Admin über die mailcow UI einrichten. 2 | 3 | Dies ist nützlich, wenn Sie ausgehende E-Mails für eine bestimmte Domain an einen Drittanbieter-Spamfilter oder einen Dienst wie Mailgun oder Sendgrid weiterleiten möchten. Dies ist auch bekannt als ein _smarthost_. 4 | Falls nicht, überprüfen Sie den Fehler und beheben Sie ihn. 5 | 6 | ## Einen neuen Relayhost hinzufügen 7 | Gehen Sie auf die Registerkarte "Routing" im Abschnitt "Konfiguration und Details" der mailcow UI. 8 | Hier sehen Sie eine Liste der derzeit eingerichteten Relayhosts. 9 | 10 | Blättern Sie zum Abschnitt "Absenderabhängigen Transport hinzufügen". 11 | 12 | Fügen Sie unter `Host` den Host hinzu, an den Sie weiterleiten möchten.
13 | _Beispiel: Wenn Sie Mailgun zum Senden von E-Mails anstelle Ihrer Server-IP verwenden möchten, geben Sie smtp.mailgun.org ein._ 14 | 15 | Wenn der Relay-Host zur Authentifizierung einen Benutzernamen und ein Passwort benötigt, geben Sie diese in die entsprechenden Felder ein.
16 | Beachten Sie, dass die Anmeldedaten im Klartext gespeichert werden. 17 | 18 | ### Testen Sie einen Relayhost 19 | Um zu testen, ob die Verbindung zum Host funktioniert, klicken Sie in der Liste der Relayhosts auf `Test` und geben Sie eine _Von:_-Adresse ein. Führen Sie dann den Test aus. 20 | 21 | Sie sehen dann die Ergebnisse der SMTP-Übertragung. Wenn alles klappt, sollten Sie Folgendes sehen: 22 | `SERVER -> CLIENT: 250 2.0.0 Ok: queued as A093B401D4` als eine der letzten Zeilen. 23 | 24 | Ist dies nicht der Fall, überprüfen Sie den angegebenen Fehler und beheben Sie ihn. 25 | 26 | **Hinweis:** Einige Hosts, insbesondere solche, die keine Authentifizierung verlangen, verweigern Verbindungen von Servern, die nicht zuvor in ihr System aufgenommen wurden. Lesen Sie unbedingt die Dokumentation des Relayhosts, um sicherzustellen, dass Sie Ihre Domain und/oder die Server-IP zu ihrem System hinzugefügt haben. 27 | 28 | **Tipp:** Sie können die standardmäßige _Von:_-Adresse, die der Test verwendet, von _null@mailcow.email_ auf eine beliebige E-Mail-Adresse ändern, indem Sie die Variable _$RELAY_TO_ in der Datei _vars.inc.php_ unter _/opt/mailcow-dockerized/data/web/inc_ ändern.
Auf diese Weise können Sie überprüfen, ob das Relay funktioniert hat, indem Sie das Zielpostfach überprüfen. 29 | 30 | ## Relayhost für eine Domain festlegen 31 | Wechseln Sie auf die Registerkarte "Domains" im Abschnitt "E-Mail-Setup" der mailcow UI. 32 | 33 | Bearbeiten Sie die gewünschte Domain. 34 | 35 | Wählen Sie den neu hinzugefügten Host in der Dropdown-Liste "Absenderabhängige Transporte" aus und speichern Sie die Änderungen. 36 | 37 | Senden Sie eine E-Mail von einer Mailbox auf dieser Domain und Sie sollten in den Protokollen sehen, dass Postfix die Nachricht an den Relayhost weiterleitet. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-relayhost.en.md: -------------------------------------------------------------------------------- 1 | As of September 12, 2018 you can setup relayhosts as admin by using the mailcow UI. 2 | 3 | This is useful if you want to relay outgoing emails for a specific domain to a third-party spam filter or a service like Mailgun or Sendgrid. This is also known as a _smarthost_. 4 | 5 | ## Add a new relayhost 6 | Go to the `Routing` tab of the `Configuration and Details` section of the admin UI. 7 | Here you will see a list of relayhosts currently setup. 8 | 9 | Scroll to the `Add sender-dependent transport` section. 10 | 11 | Under `Host`, add the host you want to relay to.
12 | _Example: if you want to use Mailgun to send emails instead of your server IP, enter smtp.mailgun.org_ 13 | 14 | If the relay host requires a username and password to authenticate, enter them in the respective fields.
15 | Keep in mind the credentials will be stored in plain text. 16 | 17 | ### Test a relayhost 18 | To test that connectivity to the host works, click on `Test` from the list of relayhosts and enter a _From:_ address. Then, run the test. 19 | 20 | You will then see the results of the SMTP transmission. If all went well, you should see 21 | `SERVER -> CLIENT: 250 2.0.0 Ok: queued as A093B401D4` as one of the last lines. 22 | 23 | If not, review the error provided and resolve it. 24 | 25 | **Note:** Some hosts, especially those who do not require authentication, will deny connections from servers that have not been added to their system beforehand. Make sure you read the documentation of the relayhost to make sure you've added your domain and/or the server IP to their system. 26 | 27 | **Tip:** You can change the default test _To:_ address the test uses from _null@mailcow.email_ to any email address you choose by modifying the _$RELAY_TO_ variable on the _vars.inc.php_ file under _/opt/mailcow-dockerized/data/web/inc_
This way you can check that the relay worked by checking the destination mailbox. 28 | 29 | ## Set the relayhost for a domain 30 | Go to the `Domains` tab of the `Mail setup` section of the admin UI. 31 | 32 | Edit the desired domain. 33 | 34 | Select the newly added host on the `Sender-dependent transports` dropdown and save changes. 35 | 36 | Send an email from a mailbox on that domain and you should see postfix handing the message over to the relayhost in the logs. -------------------------------------------------------------------------------- /docs/manual-guides/Postfix/u_e-postfix-unauthenticated-relaying.en.md: -------------------------------------------------------------------------------- 1 | By default, mailcow's postfix considers **all networks untrusted** except its own IPV4_NETWORK and IPV6_NETWORK ranges, which are specified in `mailcow.conf`. Although this is reasonable in most cases, there may be circumstances where you want to add a host or subnet as an **unauthenticated relayer**. 2 | 3 | By default, mailcow uses `mynetworks_style = subnet` to specify internal subnets and leaves `mynetworks` unconfigured. 4 | 5 | If you decide to set `mynetworks` independently in Postfix's `extra.conf`, Postfix will ignore the mynetworks_style setting. This means that you will have to add the IPv4 and IPv6 addresses used internally by mailcow (specified in `mailcow.conf` as IPV4_NETWORK and IPV6_NETWORK respectively), as well as the loopback subnets manually! 6 | 7 | !!! abstract "Explanation" 8 | The setting `mynetworks` allows registered hosts or subnets to send e-mails to the Postfix MTA **WITHOUT** authentication. This is especially useful if monitoring e-mails are to be sent from Linux servers in the same network without extra authentication. 9 | 10 | !!! danger 11 | A wrong setting of `mynetworks` allows your server to be used as an open relay. If this is abused, it will **impair** your ability to send email and it may take some time for this to subside. 12 | 13 | !!! example 14 | As an example, let's take the subnet `192.168.2.0/24`, which we want to relay unauthenticated. 15 | 16 | Edit `data/conf/postfix/extra.cf`: 17 | 18 | ``` 19 | mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 [fe80::]/10 172.22.1.0/24 [fd4d:6169:6c63:6f77::]/64 192.168.2.0/24 20 | ``` 21 | 22 | Edit `data/conf/rspamd/local.d/options.inc` aswell: 23 | 24 | ``` 25 | local_addrs = [127.0.0.0/8, ::ffff:127.0.0.0/104, ::1/128, fe80::/10, 172.22.1.0/24, fd4d:6169:6c63:6f77::/64, 192.168.2.0/24]; 26 | ``` 27 | 28 | 29 | !!! warning 30 | The subnets before our attached example subnet **MUST** exists before or after your entered values. Otherwise some mailcow components such as Watchdog or some Sieve Filters (such as Absence Agents) will not work and errors will occur during operation. 31 | 32 | Run the following command to apply your new settings: 33 | 34 | === "docker compose (Plugin)" 35 | 36 | ``` bash 37 | docker compose restart postfix-mailcow rspamd-mailcow 38 | ``` 39 | 40 | === "docker-compose (Standalone)" 41 | 42 | ``` bash 43 | docker-compose restart postfix-mailcow rspamd-mailcow 44 | ``` 45 | 46 | !!! tip "Good to know!" 47 | IPv6 addresses **MUST** be entered with `[]` (square brackets) as `mynetworks` parameters in this case. Otherwise they cannot be processed. 48 | 49 | !!! Info 50 | More information about mynetworks can be found in the [Postfix documentation](http://www.postfix.org/postconf.5.html#mynetworks). -------------------------------------------------------------------------------- /docs/manual-guides/Redis/u_e-redis.de.md: -------------------------------------------------------------------------------- 1 | Redis wird als Key-Value-Speicher für die Einstellungen und Daten von rspamd und (einige von) mailcow verwendet. Wenn Sie mit Redis nicht vertraut sind, lesen Sie bitte die [Einführung in Redis](https://redis.io/topics/introduction) und besuchen Sie gegebenenfalls diese [wunderbare Anleitung](http://try.redis.io/), um zu erfahren, wie man Redis benutzt. 2 | 3 | ## Client 4 | 5 | Um sich mit dem redis cli zu verbinden, führen Sie aus: 6 | === "docker compose (Plugin)" 7 | 8 | ``` bash 9 | docker compose exec redis-mailcow redis-cli 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose exec redis-mailcow redis-cli 16 | ``` 17 | 18 | ### Fehlersuche 19 | 20 | Hier sind einige nützliche Befehle für den redis-cli zur Fehlersuche: 21 | 22 | ##### MONITOR 23 | 24 | Überwacht alle vom Server empfangenen Anfragen in Echtzeit: 25 | === "docker compose (Plugin)" 26 | 27 | ``` bash 28 | #docker compose exec redis-mailcow redis-cli 29 | 127.0.0.1:6379> monitor 30 | OK 31 | 1494077286.401963 [0 172.22.1.253:41228] "SMEMBERS" "BAYES_SPAM_keys" 32 | 1494077288.292970 [0 172.22.1.253:41229] "SMEMBERS" "BAYES_SPAM_keys" 33 | [...] 34 | ``` 35 | 36 | === "docker-compose (Standalone)" 37 | 38 | ``` bash 39 | #docker-compose exec redis-mailcow redis-cli 40 | 127.0.0.1:6379> monitor 41 | OK 42 | 1494077286.401963 [0 172.22.1.253:41228] "SMEMBERS" "BAYES_SPAM_keys" 43 | 1494077288.292970 [0 172.22.1.253:41229] "SMEMBERS" "BAYES_SPAM_keys" 44 | [...] 45 | ``` 46 | 47 | ##### SCHLÜSSEL (Keys) 48 | 49 | Ermittelt alle Schlüssel, die dem Muster entsprechen: 50 | 51 | ``` 52 | KEYS * 53 | ``` 54 | 55 | ##### PING 56 | 57 | Testen Sie eine Verbindung: 58 | 59 | ``` 60 | 127.0.0.1:6379> PING 61 | PONG 62 | ``` 63 | 64 | Wenn Sie mehr wissen wollen, hier ist ein [Cheat-Sheet](https://www.cheatography.com/tasjaevan/cheat-sheets/redis/). 65 | -------------------------------------------------------------------------------- /docs/manual-guides/Redis/u_e-redis.en.md: -------------------------------------------------------------------------------- 1 | Redis is used as a key-value store for rspamd's and (some of) mailcow's settings and data. If you are unfamiliar with redis please read the [introduction to redis](https://redis.io/topics/introduction) and maybe visit this [wonderful guide](http://try.redis.io/) on how to use it. 2 | 3 | ## Client 4 | 5 | To connect to the redis cli execute: 6 | === "docker compose (Plugin)" 7 | 8 | ``` bash 9 | docker compose exec redis-mailcow redis-cli 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose exec redis-mailcow redis-cli 16 | ``` 17 | 18 | ### Debugging 19 | 20 | Here are some useful commands for the redis-cli for debugging: 21 | 22 | ##### MONITOR 23 | 24 | Listens for all requests received by the server in real time: 25 | === "docker compose (Plugin)" 26 | 27 | ``` bash 28 | #docker compose exec redis-mailcow redis-cli 29 | 127.0.0.1:6379> monitor 30 | OK 31 | 1494077286.401963 [0 172.22.1.253:41228] "SMEMBERS" "BAYES_SPAM_keys" 32 | 1494077288.292970 [0 172.22.1.253:41229] "SMEMBERS" "BAYES_SPAM_keys" 33 | [...] 34 | ``` 35 | 36 | === "docker-compose (Standalone)" 37 | 38 | ``` bash 39 | #docker-compose exec redis-mailcow redis-cli 40 | 127.0.0.1:6379> monitor 41 | OK 42 | 1494077286.401963 [0 172.22.1.253:41228] "SMEMBERS" "BAYES_SPAM_keys" 43 | 1494077288.292970 [0 172.22.1.253:41229] "SMEMBERS" "BAYES_SPAM_keys" 44 | [...] 45 | ``` 46 | 47 | ##### KEYS 48 | 49 | Get all keys matching your pattern: 50 | 51 | ``` 52 | KEYS * 53 | ``` 54 | 55 | ##### PING 56 | 57 | Test a connection: 58 | 59 | ``` 60 | 127.0.0.1:6379> PING 61 | PONG 62 | ``` 63 | 64 | If you want to know more, here is a [cheat sheet](https://www.cheatography.com/tasjaevan/cheat-sheets/redis/). 65 | -------------------------------------------------------------------------------- /docs/manual-guides/Rspamd/u-e-rspamd-add-additional-modules.de.md: -------------------------------------------------------------------------------- 1 | Laden Sie das Modul herunter und speichern Sie es in folgenden Pfad ab: `data/conf/rspamd/plugins.d/`. 2 | 3 | Danach müssen Sie die Konfigurationsparameter des Modules in `data/conf/rspamd/rspamd.conf.local` hinzufügen. 4 | Falls das Modul `my_plugin.lua` heißt, sollte die Datei wie folgt aussehen: 5 | 6 | ``` 7 | # rspamd.conf.local 8 | my_plugin { 9 | some_setting = "some value"; 10 | } 11 | ``` 12 | 13 | Falls Ihr Modul keine zusätzlichen Konfigurationen benötigt, reicht es aus einen leeren Konfigurationsblock hinzuzufügen. Wie im folgenden Beispiel zu sehen: 14 | 15 | ``` 16 | # rspamd.conf.local 17 | my_plugin { } 18 | ``` 19 | 20 | Falls Sie keinen Konfigurationsblock hinzufügen, dann wird das Modul automatisch deaktiviert und im Logfile des rspamd-mailcow Containers sehen Sie folgende Nachricht: 21 | 22 | ``` 23 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:01:32 #1(main) ; cfg; rspamd_config_is_module_enabled: lua module my_plugin is enabled but has not been configured 24 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:01:32 #1(main) ; cfg; rspamd_config_is_module_enabled: my_plugin disabling unconfigured lua module 25 | ``` 26 | 27 | Falls Sie das Modul erfolgreich konfiguiert haben, dann sollte das Logfile des rspamd-mailcow Containers wie folgt aussehen: 28 | 29 | ``` 30 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:04:50 #1(main) <8ayxpf>; cfg; rspamd_init_lua_filters: init lua module my_plugin from /etc/rspamd/plugins.d//my_plugin.lua; digest: 5cb88961e5 31 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Rspamd/u-e-rspamd-add-additional-modules.en.md: -------------------------------------------------------------------------------- 1 | Download the module and save it in the following path: `data/conf/rspamd/plugins.d/`. 2 | 3 | Next, add any necessary configuration for your module to `data/conf/rspamd/rspamd.conf.local`. \ 4 | If you have a module named `my_plugin.lua`, configuration might look like the following: 5 | 6 | ``` 7 | # rspamd.conf.local 8 | my_plugin { 9 | some_setting = "some value"; 10 | } 11 | ``` 12 | 13 | If your module does not require any additional configuration, simply add an empty configuration block, for example: 14 | 15 | ``` 16 | # rspamd.conf.local 17 | my_plugin { } 18 | ``` 19 | 20 | If you do not add a configuration block, the module will be automatically disabled, and the rspamd-mailcow container log will contain a message such as: 21 | 22 | ``` 23 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:01:32 #1(main) ; cfg; rspamd_config_is_module_enabled: lua module my_plugin is enabled but has not been configured 24 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:01:32 #1(main) ; cfg; rspamd_config_is_module_enabled: my_plugin disabling unconfigured lua module 25 | ``` 26 | 27 | If you have successfully configured your module, the rspamd-mailcow container logs should show: 28 | 29 | ``` 30 | mailcowdockerized-rspamd-mailcow-1 | 2023-05-20 14:04:50 #1(main) <8ayxpf>; cfg; rspamd_init_lua_filters: init lua module my_plugin from /etc/rspamd/plugins.d//my_plugin.lua; digest: 5cb88961e5 31 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Rspamd/u_e-rspamd-disable-greylisting.de.md: -------------------------------------------------------------------------------- 1 | !!! info "Hinweis" 2 | In dieser Anleitung gehen wir von dem standard mailcow Pfad (`/opt/mailcow-dockerized`) aus.
3 | *Der Pfad in Ihrer Installation kann möglicherweise variieren!* 4 | 5 | --- 6 | 7 | Nur Nachrichten mit einem höheren Rspamd Score werden Greylisted (soft rejected). 8 | 9 | Wir selbst empfehlen **NICHT** das Greylisting zu deaktivieren. 10 | 11 | Falls Sie einen validen Grund dafür sehen, dass Greylisting zu deaktivieren, können Sie dies serverweit durch das Editieren der `greylist.conf` deaktivieren: 12 | 13 | `/opt/mailcow-dockerized/data/conf/rspamd/local.d/greylist.conf` 14 | 15 | Fügen Sie die Zeile hinzu: 16 | 17 | ```cpp 18 | enabled = false; 19 | ``` 20 | 21 | Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose restart rspamd-mailcow 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose restart rspamd-mailcow 32 | ``` 33 | 34 | Das Greylisting ist nun **serverweit** deaktiviert! -------------------------------------------------------------------------------- /docs/manual-guides/Rspamd/u_e-rspamd-disable-greylisting.en.md: -------------------------------------------------------------------------------- 1 | !!! info 2 | In this guide we assume the default mailcow path (`/opt/mailcow-dockerized`).
3 | *The path in your installation may vary.* 4 | 5 | --- 6 | 7 | Only messages with a higher Rspamd score will be considered to be greylisted (soft rejected). 8 | 9 | We do **NOT** recommend deactivating greylisting. 10 | 11 | However, if you see a valid reason to disable greylisting, you can disable it server-wide by editing the `greylist.conf`: 12 | 13 | `/opt/mailcow-dockerized/data/conf/rspamd/local.d/greylist.conf` 14 | 15 | Add the line: 16 | 17 | ```cpp 18 | enabled = false; 19 | ``` 20 | 21 | Save the file and restart "rspamd-mailcow": 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose restart rspamd-mailcow 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose restart rspamd-mailcow 32 | ``` 33 | 34 | Greylisting is now deactivated **serverwide**! -------------------------------------------------------------------------------- /docs/manual-guides/Unbound/u_e-unbound-fwd.de.md: -------------------------------------------------------------------------------- 1 | Wenn Sie einen externen DNS-Dienst verwenden wollen oder müssen, können Sie entweder einen Forwarder in Unbound einstellen oder eine Override-Datei kopieren, um externe DNS-Server zu definieren: 2 | 3 | !!! warning "Warnung" 4 | Bitte verwenden Sie keinen öffentlichen Resolver, wie wir es im obigen Beispiel getan haben. Viele - wenn nicht sogar alle - Blacklist-Lookups werden mit öffentlichen Resolvern fehlschlagen, da der Blacklist-Server Grenzen hat, wie viele Anfragen von einer IP gestellt werden können und öffentliche Resolver diese Grenzen normalerweise erreichen.
5 | **Wichtig**: Nur DNSSEC-validierende DNS-Dienste werden funktionieren. 6 | 7 | ## Methode A, Unbound 8 | 9 | Bearbeiten Sie `data/conf/unbound/unbound.conf` und fügen Sie die folgenden Parameter hinzu: 10 | 11 | ``` 12 | forward-zone: 13 | name: "." 14 | forward-addr: 8.8.8.8 # VERWENDEN SIE KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL 15 | forward-addr: 8.8.4.4 # VERWENDET KEINE ÖFFENTLICHEN DNS-SERVER - NUR EIN BEISPIEL 16 | ``` 17 | 18 | Unbound neu starten: 19 | 20 | === "docker compose (Plugin)" 21 | 22 | ``` bash 23 | docker compose restart unbound-mailcow 24 | ``` 25 | 26 | === "docker-compose (Standalone)" 27 | 28 | ``` bash 29 | docker-compose restart unbound-mailcow 30 | ``` 31 | 32 | 33 | ## Methode B, Überschreiben der Datei 34 | 35 | ``` 36 | cd /opt/mailcow-dockerized 37 | cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml . 38 | ``` 39 | 40 | Bearbeiten Sie `docker-compose.override.yml` und passen Sie die IP an. 41 | 42 | Stoppen und starten Sie bitte im Anschluss noch den Docker Stack: 43 | 44 | === "docker compose (Plugin)" 45 | 46 | ``` bash 47 | docker compose down 48 | docker compose up -d 49 | ``` 50 | 51 | === "docker-compose (Standalone)" 52 | 53 | ``` bash 54 | docker-compose down 55 | docker-compose up -d 56 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/Unbound/u_e-unbound-fwd.en.md: -------------------------------------------------------------------------------- 1 | If you want or have to use an external DNS service, you can either set a forwarder in Unbound or copy an override file to define external DNS servers: 2 | 3 | !!! warning 4 | Please do not use a public resolver like we did in the example above. Many - if not all - blacklist lookups will fail with public resolvers, because blacklist server has limits on how much requests can be done from one IP and public resolvers usually reach this limits.
5 | **Important**: Only DNSSEC validating DNS services will work. 6 | 7 | ## Method A, Unbound 8 | 9 | Edit `data/conf/unbound/unbound.conf` and append the following parameters: 10 | 11 | ``` 12 | forward-zone: 13 | name: "." 14 | forward-addr: 8.8.8.8 # DO NOT USE PUBLIC DNS SERVERS - JUST AN EXAMPLE 15 | forward-addr: 8.8.4.4 # DO NOT USE PUBLIC DNS SERVERS - JUST AN EXAMPLE 16 | ``` 17 | 18 | Restart Unbound: 19 | 20 | === "docker compose (Plugin)" 21 | 22 | ``` bash 23 | docker compose restart unbound-mailcow 24 | ``` 25 | 26 | === "docker-compose (Standalone)" 27 | 28 | ``` bash 29 | docker-compose restart unbound-mailcow 30 | ``` 31 | 32 | 33 | ## Method B, Override file 34 | 35 | ``` 36 | cd /opt/mailcow-dockerized 37 | cp helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml . 38 | ``` 39 | 40 | Edit `docker-compose.override.yml` and adjust the IP. 41 | 42 | Afterwards stop and start the Docker Stack again: 43 | 44 | === "docker compose (Plugin)" 45 | 46 | ``` bash 47 | docker compose down 48 | docker compose up -d 49 | ``` 50 | 51 | === "docker-compose (Standalone)" 52 | 53 | ``` bash 54 | docker-compose down 55 | docker-compose up -d 56 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-bl_wl.de.md: -------------------------------------------------------------------------------- 1 | Um einen Eintrag zu Ihrer **domain-weiten** Filtertabelle hinzuzufügen oder zu bearbeiten, loggen Sie sich als (Domain-)Administrator in Ihre *mailcow UI* ein und wechseln Sie zu: 2 | `Konfiguration > E-Mail-Setup > Domains > (Domain) Bearbeiten > Spamfilter`. 3 | 4 | ![Black- und Whitelist Konfiguration](../../assets/images/manual-guides/mailcow-bl_wl.png) 5 | 6 | !!! Info 7 | Seien Sie sich bewusst, dass ein Benutzer diese [Einstellung](u_e-mailcow_ui-spamfilter.md) überschreiben kann, indem er seine eigene Black- und Whitelist setzt! 8 | 9 | Es ist auch eine globale Filtertabelle in `Konfiguration > Server-Konfiguration > Globale Filter-Maps` verfügbar, um einen **server-weiten** (also domainübergreifenden) Filter für ein oder mehrere Regex-Maps zu konfigurieren (Todo: Screenshots). 10 | -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-bl_wl.en.md: -------------------------------------------------------------------------------- 1 | To add or edit an entry to your **domain-wide** filter table, log in to your *mailcow UI* as (domain) administrator and go to: 2 | `Configuration > Email Setup > Domains > Edit Domain > Spam Filter`. 3 | 4 | ![Black- and Whitelist Configuration](../../assets/images/manual-guides/mailcow-bl_wl.png) 5 | 6 | 7 | !!! info 8 | Be aware that a user can override this [setting](u_e-mailcow_ui-spamfilter.md) by setting their own blacklist and whitelist! 9 | 10 | There is also a global filter table in `Configuration > Configuration & Details > Global filter maps` to configure a **server wide** filter for multiple regex maps (todo: screenshots). -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-config.de.md: -------------------------------------------------------------------------------- 1 | Mehrere Konfigurationsparameter der mailcow-Benutzeroberfläche können geändert werden, indem eine Datei `data/web/inc/vars.local.inc.php` erstellt wird, die die Standardeinstellungen in `data/web/inc/vars.inc.php` überschreibt. 2 | 3 | Die lokale Konfigurationsdatei ist über Updates von mailcow hinweg beständig. Versuchen Sie nicht, die Werte in `data/web/inc/vars.inc.php` zu ändern, sondern verwenden Sie diese als Vorlage für die lokale Überschreibung. 4 | 5 | mailcow UI Konfigurationsparameter können verwendet werden, um... 6 | 7 | - ...die Standardsprache zu ändern[^1] 8 | - ...das Standard-Bootstrap-Theme zu ändern 9 | - ...eine Passwort-Komplexitäts-Regex zu setzen 10 | - ...die Sichtbarkeit des privaten DKIM-Schlüssels aktivieren 11 | - ...eine Größe für den Paginierungsauslöser festlegen 12 | - ...Standard-Postfach-Attribute festlegen 13 | - ...Sitzungs-Lebensdauern ändern 14 | - ...feste App-Menüs erstellen (die nicht in der mailcow UI geändert werden können) 15 | - ...ein Standard "To"-Feld für Relayhost-Tests einstellen 16 | - ...ein Timeout für Docker API Anfragen setzen 17 | - ...IP-Anonymisierung umschalten 18 | 19 | [^1]: Um SOGos Standardsprache zu ändern, müssen Sie `data/conf/sogo/sogo.conf` bearbeiten und "English" durch Ihre bevorzugte Sprache ersetzen. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-config.en.md: -------------------------------------------------------------------------------- 1 | Several configuration parameters of the mailcow UI can be changed by creating a file `data/web/inc/vars.local.inc.php` which overrides defaults settings found in `data/web/inc/vars.inc.php`. 2 | 3 | The local configuration file is persistent over updates of mailcow. Try not to change values inside `data/web/inc/vars.inc.php`, but use them as template for the local override. 4 | 5 | mailcow UI configuration parameters can be used to... 6 | 7 | - ...change the default language[^1] 8 | - ...change the default bootstrap theme 9 | - ...set a password complexity regex 10 | - ...enable DKIM private key visibility 11 | - ...set a pagination trigger size 12 | - ...set default mailbox attributes 13 | - ...change session lifetimes 14 | - ...create fixed app menus (which cannot be changed in mailcow UI) 15 | - ...set a default "To" field for relayhost tests 16 | - ...set a timeout for Docker API requests 17 | - ...toggle IP anonymization 18 | 19 | [^1]: To change SOGos default language, you will need to edit `data/conf/sogo/sogo.conf` and replace "English" by your preferred language. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-css.de.md: -------------------------------------------------------------------------------- 1 | Für benutzerdefinierte Überschreibungen bestimmter Elemente über CSS, verwenden Sie die `data/web/css/build/0081-custom-mailcow.css` Datei. 2 | 3 | Die Datei wird von der Verfolgung (via Git) ausgeschlossen und bleibt bei Aktualisierungen erhalten. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-css.en.md: -------------------------------------------------------------------------------- 1 | For custom overrides of specific elements via CSS, use `data/web/css/build/0081-custom-mailcow.css`. 2 | 3 | The file is excluded from tracking and persists over updates. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-fido.de.md: -------------------------------------------------------------------------------- 1 | ## Wie wird UV in mailcow gehandhabt? 2 | 3 | Das UV-Flag (wie in "user verification") erzwingt, dass WebAuthn den Benutzer verifiziert, bevor es den Zugriff auf den Schlüssel erlaubt (denken Sie an eine PIN). Wir erzwingen keine UV, um Logins über iOS und NFC (YubiKey) zu ermöglichen. 4 | 5 | ## Login und Schlüssel-Verarbeitung 6 | 7 | mailcow verwendet **Client-seitige Schlüsselverarbeitung**. Wir bitten den Authentifikator (d.h. YubiKey), die Registrierung in seinem Speicher zu speichern. 8 | 9 | Ein Benutzer muss keinen Benutzernamen eingeben. Die verfügbaren Anmeldedaten - falls vorhanden - werden dem Nutzer angezeigt, wenn er den "Schlüssel-Login" über das mailcow UI Login auswählt. 10 | 11 | Beim Aufruf des Login-Prozesses werden dem Authentifikator keine Credential-IDs übergeben. Dies wird ihn dazu zwingen, die Anmeldeinformationen in seinem eigenen Speicher zu suchen. 12 | 13 | ## Wer kann WebAuthn benutzen, um sich bei mailcow anzumelden? 14 | 15 | Ab heute sind nur Administratoren und Domain-Administratoren in der Lage, WebAuthn/FIDO2 einzurichten. 16 | 17 | --- 18 | **Sie wollen WebAuthn/Fido als 2FA verwenden? Schauen Sie sich das hier an: [Zwei-Faktoren-Authentifizierung](u_e-mailcow_ui-tfa.de.md)** -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-fido.en.md: -------------------------------------------------------------------------------- 1 | ## How is UV handled in mailcow? 2 | 3 | The UV flag (as in "user verification") enforces WebAuthn to verify the user before it allows access to the key (think of a PIN). We don't enforce UV to allow logins via iOS and NFC (YubiKey). 4 | 5 | ## Login and key processing 6 | 7 | mailcow uses **client-side key processing**. We ask the authenticator (i.e. YubiKey) to save the registration in its memory. 8 | 9 | A user does not need to enter a username. The available credentials - if any - will be shown to the user when selecting the "key login" via mailcow UI login. 10 | 11 | When calling the login process, the authenticator is not given any credential IDs. This will force it to lookup credentials in its own memory. 12 | 13 | ## Who can use WebAuthn to login to mailcow? 14 | 15 | As of today, only administrators and domain administrators are able to setup WebAuthn/FIDO2. 16 | 17 | --- 18 | **You want to use WebAuthn/Fido as 2FA? Check it out here: [Two-Factor Authentication](u_e-mailcow_ui-tfa.en.md)** -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-netfilter.en.md: -------------------------------------------------------------------------------- 1 | ## Change Netfilter Ban Settings 2 | 3 | To change the Netfilter settings in general please navigate to: `Configuration -> Configuration & Details -> Configuration -> Fail2ban parameters`. 4 | 5 | You should now see a familar interface: 6 | 7 | ![Netfilter ban settings](../../assets/images/manual-guides/mailcow-netfilter_settings.en.png) 8 | 9 | Here you can set several options regarding the bans itself. 10 | For example the max. Ban time or the max. attempts before a ban is executed. 11 | 12 | ## Change Netfilter Regex 13 | 14 | !!! danger 15 | The following area requires at least basic regex knowledge.
16 | If you are not sure what you are doing there, we can only advise you not to attempt a reconfiguration. 17 | 18 | In addition to the ban settings, you can also define what exactly should be used from the mailcow container logs to ban a possible attacker. 19 | 20 | To do this, you must first expand the regex field, which will look something like this: 21 | 22 | ![Netfilter Regex](../../assets/images/manual-guides/mailcow-netfilter_regex.en.png) 23 | 24 | There you can now create various new filter rules. 25 | 26 | !!! info 27 | As updates progress, it is possible that new Netfilter regex rules will be added or removed.
28 | If this is the case, it is recommended to reset the Netfilter regex rules by clicking on `Reset to default`. 29 | 30 | ## Provide Netfilter decisions via URL as source for firewall block rules 31 | 32 | !!! info 33 | However, the option is deactivated by default and must first be activated by you. 34 | 35 | Since the 2023-12 update, mailcow offers the possibility to export the netfilter decisions as an external endpoint in order to be able to integrate the data from it into an external firewall system, quasi as a blocklist source. 36 | 37 | ??? question "What does this function do for me?" 38 | With this functionality, you can forward the IPs marked as blocked by Netfilter to an endpoint, which can then process these IPs. For example, an OPNsense firewall can dynamically load this list. 39 | 40 | Let's take a look at these settings: 41 | 42 | ![Image of the new Netfilter settings, box behind the item Manage Fail2Ban externally. Marking on the URL to the respective banlist. Arrow points to Reload button for the generation of a new URL](../../assets/images/manual-guides/mailcow-netfilter_external_endpoint.en.png) 43 | 44 | To activate the general function, the checkbox `Manage Fail2Ban externally` must be checked. 45 | 46 | As soon as this is done, the URL (point 2) can be copied and pasted into the respective endpoint. 47 | 48 | !!! warning "Important" 49 | The URL can be regenerated if required. To do this, click on the symbol next to Copy `Reload symbol`. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-pushover.de.md: -------------------------------------------------------------------------------- 1 | !!! info 2 | Pushover macht es einfach, Echtzeit-Benachrichtigungen auf Ihrem Android, iPhone, iPad und Desktop zu erhalten 3 | 4 | 5 | Sie können Pushover verwenden, um eine Push-Benachrichtigung über jede E-Mail zu erhalten, die Sie für jede Mailbox erhalten, in der Sie diese Funktion aktiviert haben. 6 | 7 | 1\. Öffnen Sie als Administrator die Einstellungen Ihres Postfachs und scrollen Sie nach unten zu den Pushover-Einstellungen 8 | 9 | 2\. Registrieren Sie sich bei [Pushover](https://pushover.net) 10 | 11 | 3\. Geben Sie Ihren "Benutzerschlüssel" in das Feld "Benutzer-/Gruppenschlüssel" in den Einstellungen Ihres Postfachs ein 12 | 13 | 4\. Erstellen Sie eine Anwendung, um das API-Token/den API-Schlüssel zu erhalten, das/den Sie ebenfalls in Ihre Postfacheinstellungen eintragen müssen. 14 | 15 | 5\. Optional können Sie den Titel/Text der Benachrichtigung bearbeiten und bestimmte Absender-E-Mail-Adressen festlegen, bei denen eine Push-Benachrichtigung ausgelöst wird 16 | 17 | 6\. Speichern Sie alles und überprüfen Sie dann Ihre Anmeldedaten. 18 | 19 | Wenn alles erledigt ist, können Sie testen, ob Sie eine E-Mail senden können, und Sie erhalten eine Push-Nachricht auf Ihrem Telefon -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-pushover.en.md: -------------------------------------------------------------------------------- 1 | !!! info 2 | Pushover makes it easy to get real-time notifications on your Android, iPhone, iPad, and Desktop 3 | 4 | 5 | You can use Pushover to get a push notification on every mail you receive for each mailbox where you enabled this feature. 6 | 7 | 8 | 1\. As admin open your mailbox' settings and scroll down to the Pushover settings 9 | 10 | 11 | 2\. Register yourself on [Pushover](https://pushover.net) 12 | 13 | 14 | 3\. Put your 'User Key' in the 'User/Group Key' field in your mailbox settings 15 | 16 | 4\. Create an Applications to get the API Token/Key which you also need to put in your mailbox settings 17 | 18 | 19 | 5\. Optional you can edit the notification title/text and define certain sender email addresses where a push notification is triggered 20 | 21 | 22 | 6\. Save everything and then you can verify your credentials 23 | 24 | 25 | If everything is done you can test sending a mail and you will receive a push message on your phone -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-spamalias.de.md: -------------------------------------------------------------------------------- 1 | Diese temporären E-Mail-Aliasnamen werden meist dort verwendet, wo wir eine E-Mail-Adresse angeben müssen, aber keine weitere E-Mails wünschen. Sie werden auch Spam-Alias genannt. 2 | 3 | Um ein temporäres E-Mail-Alias zu erstellen, zu löschen oder zu erweitern, müssen Sie sich in mailcow's UI als Mailbox-Nutzer anmelden und zum Reiter **Temporäre E-Mail-Aliase** navigieren: 4 | 5 | ![Wie man Spam- oder temporäre E-Mail-Aliase in mailcow einrichtet](../../assets/images/manual-guides/mailcow-spamalias.png) -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-spamalias.en.md: -------------------------------------------------------------------------------- 1 | These temporary email aliases are mostly used for places where we need to provide an email address but don't want future correspondence with. They are also called spam alias. 2 | 3 | To create, delete or extend a temporary email aliases you need to login to mailcow's UI as a mailbox user and navigate to the tab **Temporary email aliases**: 4 | 5 | ![How to set spam- or temporary email aliases in mailcow](../../assets/images/manual-guides/mailcow-spamalias.png) -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-spamfilter.de.md: -------------------------------------------------------------------------------- 1 | Ein Mailbox-Nutzer kann den Spam-Filter und die Black-/Whitelist-Einstellungen für seine Mailbox individuell anpassen, indem er zum Reiter **Spam-Filter** in der mailcow-Benutzeroberfläche navigiert. 2 | 3 | ![Wo man die Spam-, Black- und Whitelist-Einstellungen des Benutzers anpasst](../../assets/images/manual-guides/mailcow-spamfilter.png) 4 | 5 | !!! info 6 | Für globale Einstellungen Ihres Spamfilters lesen Sie bitte unseren Abschnitt über [Rspamd](../Rspamd/u-e-rspamd-tweaks.md). 7 | Für eine domainweite Black- und Whitelist lesen Sie bitte unsere Anleitung zu [Black / Whitelist](u_e-mailcow_ui-bl_wl.md) -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-spamfilter.en.md: -------------------------------------------------------------------------------- 1 | A mailbox user may adjust the spam filter and black- / whitelist settings for his mailbox individually by navigating to the **Spam filter** tab in the users mailcow UI. 2 | 3 | ![Where to adjust the users spam, black- and whitelist settings](../../assets/images/manual-guides/mailcow-spamfilter.png) 4 | 5 | !!! info 6 | For global adjustments on your spam filter please check our section on [Rspamd](../Rspamd/u-e-rspamd-tweaks.md). 7 | For a domain wide black- and whitelist please check our guide on [Black / Whitelist](u_e-mailcow_ui-bl_wl.md) -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-sub_addressing.de.md: -------------------------------------------------------------------------------- 1 | Mailbox-Nutzer können ihre Mailadresse wie in "me+facebook@example.org" markieren. Sie können die Tag-Behandlung im **mailcow UI** Panel (für den Benutzer) unter `Mailbox > Einstellungen` kontrollieren. 2 | ![mailcow mail tagging settings](../../assets/images/manual-guides/mailcow-tagging.png) 3 | 4 | *`Sub-Adressierung` (RFC 5233) oder `Plus-Adressierung` auch als Tagging bekannt (nicht zu verwechseln mit [Tags](../mailcow-UI/u_e-mailcow_ui-tags.md))* 5 | 6 | 7 | ### Verfügbare Aktionen 8 | 9 | 1\. Diese Nachricht in einen Unterordner "facebook" verschieben (wird in Kleinbuchstaben erstellt, falls nicht vorhanden) 10 | 11 | 2\. Den Tag dem Betreff voranstellen: "[facebook] Betreff" 12 | 13 | Bitte beachten Sie: Großgeschriebene Tags werden in Kleinbuchstaben umgewandelt, mit Ausnahme des ersten Buchstabens. Wenn Sie den Tag so lassen wollen, wie er ist, wenden Sie bitte den folgenden Diff an und starten Sie mailcow neu: 14 | ``` 15 | diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after 16 | index e047136e..933c4137 100644 17 | --- a/data/conf/dovecot/global_sieve_after 18 | +++ b/data/conf/dovecot/global_sieve_after 19 | @@ -15,7 +15,7 @@ if allof ( 20 | envelope :detail :matches "to" "*", 21 | header :contains "X-Moo-Tag" "YES" 22 | ) { 23 | - set :lower :upperfirst "tag" "${1}"; 24 | + set "tag" "${1}"; 25 | if mailboxexists "INBOX/${1}" { 26 | fileinto "INBOX/${1}"; 27 | } else { 28 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-sub_addressing.en.md: -------------------------------------------------------------------------------- 1 | Mailbox users can tag their mail address like in `me+facebook@example.org`. They can control the tag handling in the users **mailcow UI** panel under `Mailbox > Settings`. 2 | ![mailcow mail tagging settings](../../assets/images/manual-guides/mailcow-tagging.png) 3 | 4 | *`sub-addressing` (RFC 5233) or `plus addressing` also known as tagging (do not mix with [Tags](../mailcow-UI/u_e-mailcow_ui-tags.md))* 5 | 6 | 7 | ### Available Actions 8 | 9 | 1\. Move this message to a sub folder "facebook" (will be created lower case if not existing) 10 | 11 | 2\. Prepend the tag to the subject: "[facebook] Subject" 12 | 13 | Please note: Uppercase tags are converted to lowercase except for the first letter. If you want to keep the tag as it is, please apply the following diff and restart mailcow: 14 | ``` 15 | diff --git a/data/conf/dovecot/global_sieve_after b/data/conf/dovecot/global_sieve_after 16 | index e047136e..933c4137 100644 17 | --- a/data/conf/dovecot/global_sieve_after 18 | +++ b/data/conf/dovecot/global_sieve_after 19 | @@ -15,7 +15,7 @@ if allof ( 20 | envelope :detail :matches "to" "*", 21 | header :contains "X-Moo-Tag" "YES" 22 | ) { 23 | - set :lower :upperfirst "tag" "${1}"; 24 | + set "tag" "${1}"; 25 | if mailboxexists "INBOX/${1}" { 26 | fileinto "INBOX/${1}"; 27 | } else { 28 | ``` -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-tags.de.md: -------------------------------------------------------------------------------- 1 | !!! info "Hinweis" 2 | Um diese Funktion nutzen zu können ist das Update 2022-05 (oder höher) erforderlich!
3 | Sollten Sie das Update nicht installiert haben, denken Sie bitte über ein Update nach.
4 | Für weitere Informationen bezüglich dem Update Prozess schauen Sie [hier](../../maintenance/update.md). 5 | 6 | ### Wofür wurden die Tags implementiert? 7 | Mit den Tags ist es deutlich einfacher gezielt nach Domains bzw. Mailboxen zu suchen (wenn diese einen Tag haben). 8 | 9 | ### Wo lassen sich die Tags finden? 10 | Die Tags befinden sich in der Domain/Mailbox Sektion der mailcow UI. 11 | Um sie zu sehen, klicken Sie einfach auf das kleine Plus-Symbol auf der linken Seite Ihrer Domain/Mailbox (das folgende Bild zeigt das Domain-Ribbon-Menü): 12 | ![Domain/Mailbox Tags Ribbon](../../assets/images/manual-guides/mailcow-domain_tags_ribbon.de.png) 13 | 14 | ### Wie kann ich ein Tag hinzufügen/entfernen? 15 | Sie können bei der Erstellung einer neuen Domain/eines neuen Postfachs einfach ein Tag hinzufügen/entfernen. Sie können sie auch hinzufügen/entfernen, wenn Sie Ihre gewünschte Domain/Mailbox bearbeiten. 16 | 17 | Es sieht ähnlich aus wie hier (das folgende Bild zeigt den Bereich zur Bearbeitung der Domäne): 18 | 19 | ![Domain/Mailbox Tags](../../assets/images/manual-guides/mailcow-domain_email_tags.de.png) 20 | 21 | 22 | ### Wie kann ich nach einem Tag suchen? 23 | Geben Sie einfach den Tag-Namen in die Suchleiste im Bereich Domain/Postfach ein und warten Sie, bis der Vorgang abgeschlossen ist. 24 | 25 | Sie können sogar angeben, ob Sie nur nach Tags suchen möchten. -------------------------------------------------------------------------------- /docs/manual-guides/mailcow-UI/u_e-mailcow_ui-tags.en.md: -------------------------------------------------------------------------------- 1 | !!! info 2 | You need the mailcow Version 2022-05 at least for this feature.
3 | If you don´t have the Version installed please consider a update.
4 | For more informations about a mailcow update please take a look at the [Update](../../maintenance/update.md) section here in the docs. 5 | 6 | ### What are Tags designed for? 7 | With the Tags you can easily sort your Domains and Mailboxes by the tags instead of their name. 8 | 9 | ### Where are the Tags located? 10 | The Tags are located in the Domain/Mailbox section of the mailcow UI. 11 | To view them simply click on the small plus symbol on the left of your Domain/Mailbox (following picture is showing the domain ribbon menu): 12 | ![Domain/Mailbox Tags Ribbon](../../assets/images/manual-guides/mailcow-domain_tags_ribbon.png) 13 | 14 | 15 | ### How can i add/remove a Tag? 16 | You can simply add/remove a Tag during the creation of a new Domain/Mailbox. You also can add/remove them if you edit your desired Domain/Mailbox. 17 | 18 | It looks similar to this (following picture showing the domain edit section): 19 | 20 | ![Domain/Mailbox Tags](../../assets/images/manual-guides/mailcow-domain_email_tags.png) 21 | 22 | 23 | ### How can i search for a tag? 24 | Simply type the Tag Name in the search bar in the Domain/Mailbox Section and wait for it to complete. 25 | 26 | You can even specify if you want to search for tags only. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-80_to_443.de.md: -------------------------------------------------------------------------------- 1 | **Wenn Sie einen Reverse Proxy vor mailcow verwenden, lesen Sie bitte unsere [Reverse Proxy Anleitung](../post_installation/reverse-proxy/r_p.md), die eine Umleitung von HTTP auf HTTPS beinhaltet.** 2 | 3 | Öffne `mailcow.conf` und setze `HTTP_BIND=` - falls nicht bereits gesetzt. 4 | 5 | ### Version >= 2025-01a 6 | Öffne `mailcow.conf` und setze `HTTP_REDIRECT=y`. 7 | Erstellen Sie den Container neu: 8 | === "docker compose (Plugin)" 9 | 10 | ``` bash 11 | docker compose up -d 12 | ``` 13 | 14 | === "docker-compose (Standalone)" 15 | 16 | ``` bash 17 | docker-compose up -d 18 | ``` 19 | 20 | ### Version < 2025-01 21 | Erstellen Sie eine neue Datei `data/conf/nginx/redirect.conf` und fügen Sie die folgende Serverkonfiguration in die Datei ein: 22 | 23 | ``` 24 | server { 25 | root /web; 26 | listen 80 default_server; 27 | listen [::]:80 default_server; 28 | include /etc/nginx/conf.d/server_name.active; 29 | if ( $request_uri ~* "%0A|%0D" ) { return 403; } 30 | location ^~ /.well-known/acme-challenge/ { 31 | allow all; 32 | default_type "text/plain"; 33 | } 34 | location / { 35 | return 301 https://$host$uri$is_args$args; 36 | } 37 | } 38 | ``` 39 | 40 | Falls Sie den Parameter HTTP_BIND geändert haben, erstellen Sie den Container neu: 41 | 42 | === "docker compose (Plugin)" 43 | 44 | ``` bash 45 | docker compose up -d 46 | ``` 47 | 48 | === "docker-compose (Standalone)" 49 | 50 | ``` bash 51 | docker compose up -d 52 | ``` 53 | 54 | Andernfalls starten Sie Nginx neu: 55 | 56 | === "docker compose (Plugin)" 57 | 58 | ``` bash 59 | docker compose restart 60 | ``` 61 | 62 | === "docker-compose (Standalone)" 63 | 64 | ``` bash 65 | docker compose restart 66 | ``` 67 | -------------------------------------------------------------------------------- /docs/manual-guides/u_e-80_to_443.en.md: -------------------------------------------------------------------------------- 1 | **If you are using a reverse proxy in front of mailcow, please see our [reverse proxy guide](../post_installation/reverse-proxy/r_p.md) for this, which includes a redirect from HTTP to HTTPS.** 2 | 3 | Open `mailcow.conf` and set `HTTP_BIND=` - if not already set. 4 | 5 | ### Version >= 2025-01a 6 | Open `mailcow.conf` and set `HTTP_REDIRECT=y`. 7 | Recreate the container: 8 | === "docker compose (Plugin)" 9 | 10 | ``` bash 11 | docker compose up -d 12 | ``` 13 | 14 | === "docker-compose (Standalone)" 15 | 16 | ``` bash 17 | docker-compose up -d 18 | ``` 19 | 20 | ### Version < 2025-01 21 | Since February the 28th 2017 mailcow does come with port 80 and 443 enabled. 22 | 23 | Create a new file `data/conf/nginx/redirect.conf` and add the following server config to the file: 24 | 25 | ``` 26 | server { 27 | root /web; 28 | listen 80 default_server; 29 | listen [::]:80 default_server; 30 | include /etc/nginx/conf.d/server_name.active; 31 | if ( $request_uri ~* "%0A|%0D" ) { return 403; } 32 | location ^~ /.well-known/acme-challenge/ { 33 | allow all; 34 | default_type "text/plain"; 35 | } 36 | location / { 37 | return 301 https://$host$uri$is_args$args; 38 | } 39 | } 40 | ``` 41 | 42 | In case you changed the HTTP_BIND parameter, recreate the container: 43 | 44 | === "docker compose (Plugin)" 45 | 46 | ``` bash 47 | docker compose up -d 48 | ``` 49 | 50 | === "docker-compose (Standalone)" 51 | 52 | ``` bash 53 | docker-compose up -d 54 | ``` 55 | 56 | Otherwise restart Nginx: 57 | 58 | === "docker compose (Plugin)" 59 | 60 | ``` bash 61 | docker compose restart 62 | ``` 63 | 64 | === "docker-compose (Standalone)" 65 | 66 | ``` bash 67 | docker-compose restart 68 | ``` 69 | -------------------------------------------------------------------------------- /docs/manual-guides/u_e-autodiscover_config.de.md: -------------------------------------------------------------------------------- 1 | **Sie brauchen diese Datei nicht zu ändern oder zu erstellen, autodiscover funktioniert sofort**. Diese Anleitung ist nur für Anpassungen des Autodiscover- oder Autokonfigurationsprozesses gedacht. 2 | 3 | Neuere Outlook-Clients (insbesondere solche, die mit O365 ausgeliefert werden) führen keine automatische Erkennung von E-Mail-Profilen durch. 4 | Denken Sie daran, dass **ActiveSync NICHT mit einem Desktop-Client** verwendet werden sollte. 5 | 6 | Öffnen/erstellen Sie `data/web/inc/vars.local.inc.php` und fügen Sie Ihre Änderungen in das Konfigurationsfeld ein. 7 | 8 | Die Änderungen werden mit "$autodiscover_config" in `data/web/inc/vars.inc.php` zusammengeführt): 9 | 10 | ``` 11 | 'activesync', 16 | // If autodiscoverType => activesync, also use ActiveSync (EAS) for Outlook desktop clients (>= Outlook 2013 on Windows) 17 | // Outlook for Mac does not support ActiveSync 18 | 'useEASforOutlook' => 'yes', 19 | // Please don't use STARTTLS-enabled service ports in the "port" variable. 20 | // The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services). 21 | // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable. 22 | 'imap' => array( 23 | 'server' => $mailcow_hostname, 24 | 'port' => array_pop(explode(':', getenv('IMAPS_PORT'))), 25 | 'tlsport' => array_pop(explode(':', getenv('IMAP_PORT'))), 26 | ), 27 | 'pop3' => array( 28 | 'server' => $mailcow_hostname, 29 | 'port' => array_pop(explode(':', getenv('POPS_PORT'))), 30 | 'tlsport' => array_pop(explode(':', getenv('POP_PORT'))), 31 | ), 32 | 'smtp' => array( 33 | 'server' => $mailcow_hostname, 34 | 'port' => array_pop(explode(':', getenv('SMTPS_PORT'))), 35 | 'tlsport' => array_pop(explode(':', getenv('SUBMISSION_PORT'))), 36 | ), 37 | 'activesync' => array( 38 | 'url' => 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync', 39 | ), 40 | 'caldav' => array( 41 | 'server' => $mailcow_hostname, 42 | 'port' => $https_port, 43 | ), 44 | 'carddav' => array( 45 | 'server' => $mailcow_hostname, 46 | 'port' => $https_port, 47 | ), 48 | ); 49 | ``` 50 | 51 | Um immer IMAP und SMTP anstelle von EAS zu verwenden, setzen Sie `'autodiscoverType' => 'imap'`. 52 | 53 | Deaktivieren Sie ActiveSync für Outlook-Desktop-Clients, indem Sie "useEASforOutlook" auf "no" setzen. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-autodiscover_config.en.md: -------------------------------------------------------------------------------- 1 | **You do not need to change or create this file, autodiscover works out of the box**. This guide is only meant for customizations to the autodiscover or autoconfig process. 2 | 3 | Newer Outlook clients (especially those delivered with O365) will not autodiscover mail profiles. 4 | Keep in mind, that **ActiveSync should NOT be used with a desktop client**. 5 | 6 | Open/create `data/web/inc/vars.local.inc.php` and add your changes to the configuration array. 7 | 8 | Changes will be merged with "$autodiscover_config" in `data/web/inc/vars.inc.php`): 9 | 10 | ``` 11 | 'activesync', 16 | // If autodiscoverType => activesync, also use ActiveSync (EAS) for Outlook desktop clients (>= Outlook 2013 on Windows) 17 | // Outlook for Mac does not support ActiveSync 18 | 'useEASforOutlook' => 'yes', 19 | // Please don't use STARTTLS-enabled service ports in the "port" variable. 20 | // The autodiscover service will always point to SMTPS and IMAPS (TLS-wrapped services). 21 | // The autoconfig service will additionally announce the STARTTLS-enabled ports, specified in the "tlsport" variable. 22 | 'imap' => array( 23 | 'server' => $mailcow_hostname, 24 | 'port' => array_pop(explode(':', getenv('IMAPS_PORT'))), 25 | 'tlsport' => array_pop(explode(':', getenv('IMAP_PORT'))), 26 | ), 27 | 'pop3' => array( 28 | 'server' => $mailcow_hostname, 29 | 'port' => array_pop(explode(':', getenv('POPS_PORT'))), 30 | 'tlsport' => array_pop(explode(':', getenv('POP_PORT'))), 31 | ), 32 | 'smtp' => array( 33 | 'server' => $mailcow_hostname, 34 | 'port' => array_pop(explode(':', getenv('SMTPS_PORT'))), 35 | 'tlsport' => array_pop(explode(':', getenv('SUBMISSION_PORT'))), 36 | ), 37 | 'activesync' => array( 38 | 'url' => 'https://'.$mailcow_hostname.($https_port == 443 ? '' : ':'.$https_port).'/Microsoft-Server-ActiveSync', 39 | ), 40 | 'caldav' => array( 41 | 'server' => $mailcow_hostname, 42 | 'port' => $https_port, 43 | ), 44 | 'carddav' => array( 45 | 'server' => $mailcow_hostname, 46 | 'port' => $https_port, 47 | ), 48 | ); 49 | ``` 50 | 51 | To always use IMAP and SMTP instead of EAS, set `'autodiscoverType' => 'imap'`. 52 | 53 | Disable ActiveSync for Outlook desktop clients by setting "useEASforOutlook" to "no". -------------------------------------------------------------------------------- /docs/manual-guides/u_e-reeanble-weak-protocols.de.md: -------------------------------------------------------------------------------- 1 | Am 12. Februar 2020 haben wir die veralteten Protokolle TLS 1.0 und 1.1 in Dovecot (POP3, POP3S, IMAP, IMAPS) und Postfix (SMTPS, SUBMISSION) deaktiviert. 2 | 3 | Mit dem Juni 2024 Patch (2024-06) wurde auch TLS 1.0 und TLS 1.1 für unauthentifizierte Mails über SMTP auf Port 25/tcp deaktiviert, da die meisten modernen und gut konfigurierten E-Mail-Server im Internet mittlerweile bessere Verschlüsselungen als TLS 1.0/1.1 nutzen. 4 | 5 | **Wie kann man schwache Protokolle wieder aktivieren, falls erforderlich?** 6 | 7 | Bearbeiten Sie `data/conf/postfix/extra.cf`: 8 | 9 | ``` 10 | # Für SMTPS/Submission 11 | submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 12 | smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 13 | 14 | # Für SMTP (via STARTTLS) 15 | smtp_tls_protocols = !SSLv2, !SSLv3 16 | smtpd_tls_protocols = !SSLv2, !SSLv3 17 | ``` 18 | 19 | Bearbeiten Sie `data/conf/dovecot/extra.conf`: 20 | 21 | ``` 22 | ssl_min_protocol = TLSv1 23 | ``` 24 | 25 | Starten Sie die betroffenen Dienste neu: 26 | 27 | === "docker compose (Plugin)" 28 | 29 | ``` bash 30 | docker compose restart postfix-mailcow dovecot-mailcow 31 | ``` 32 | 33 | === "docker-compose (Standalone)" 34 | 35 | ``` bash 36 | docker-compose restart postfix-mailcow dovecot-mailcow 37 | ``` 38 | 39 | Tipp: Sie können TLS 1.2 in Windows 7 aktivieren. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-reeanble-weak-protocols.en.md: -------------------------------------------------------------------------------- 1 | On February 12th, 2020, we disabled the deprecated protocols TLS 1.0 and 1.1 in Dovecot (POP3, POP3S, IMAP, IMAPS) and Postfix (SMTPS, SUBMISSION). 2 | 3 | With the June 2024 Patch (2024-06), TLS 1.0 and TLS 1.1 were also disabled for unauthenticated mail via SMTP on port 25/tcp, as most modern and well-configured email servers on the internet now use better encryptions than TLS 1.0/1.1. 4 | 5 | **How to re-enable weak protocols if necessary?** 6 | 7 | Edit `data/conf/postfix/extra.cf`: 8 | 9 | ``` 10 | # For SMTPS/Submission 11 | submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 12 | smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 13 | 14 | # For SMTP (via STARTTLS) 15 | smtp_tls_protocols = !SSLv2, !SSLv3 16 | smtpd_tls_protocols = !SSLv2, !SSLv3 17 | ``` 18 | 19 | Edit `data/conf/dovecot/extra.conf`: 20 | 21 | ``` 22 | ssl_min_protocol = TLSv1 23 | ``` 24 | 25 | Restart the affected services: 26 | 27 | === "docker compose (Plugin)" 28 | 29 | ``` bash 30 | docker compose restart postfix-mailcow dovecot-mailcow 31 | ``` 32 | 33 | === "docker-compose (Standalone)" 34 | 35 | ``` bash 36 | docker-compose restart postfix-mailcow dovecot-mailcow 37 | ``` 38 | 39 | Hint: You can enable TLS 1.2 in Windows 7. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-update-hooks.de.md: -------------------------------------------------------------------------------- 1 | Es ist möglich, Pre- und Post-Update-Hooks zum `update.sh` Skript hinzuzufügen, das Ihre gesamte mailcow-Installation aktualisiert. 2 | 3 | Um dies zu tun, fügen Sie einfach das entsprechende Bash-Skript in Ihr mailcow-Root-Verzeichnis ein: 4 | 5 | * `pre_update_hook.sh` für Befehle, die vor dem Update laufen sollen 6 | * `post_update_hook.sh` für Befehle, die nach dem Update ausgeführt werden sollen 7 | 8 | Beachten Sie, dass `pre_update_hook.sh` jedes Mal ausgeführt wird, wenn Sie `update.sh` aufrufen, und `post_update_hook.sh` wird nur ausgeführt, wenn die Aktualisierung erfolgreich war und das Skript nicht erneut ausgeführt werden muss. 9 | 10 | Die Skripte werden von der Bash ausgeführt, ein Interpreter (z.B. `#!/bin/bash`) sowie ein Execute Permission Flag ("+x") sind nicht erforderlich. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-update-hooks.en.md: -------------------------------------------------------------------------------- 1 | It is possible to add pre- and post-update-hooks to the `update.sh` script that upgrades your whole mailcow installation. 2 | 3 | To do so, just add the corresponding bash script into your mailcow root directory: 4 | 5 | * `pre_update_hook.sh` for commands that should run before the update 6 | * `post_update_hook.sh` for commands that should run after the update is completed 7 | 8 | Keep in mind that `pre_update_hook.sh` runs every time you call `update.sh` and `post_update_hook.sh` will only run if the update was successful and the script doesn't have to be re-run. 9 | 10 | The scripts will be run by bash, an interpreter (e.g. `#!/bin/bash`) as well as an execute permission flag ("+x") are not required. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-why_unbound.de.md: -------------------------------------------------------------------------------- 1 | Für DNS-Blacklist-Lookups und DNSSEC. 2 | 3 | Die meisten Systeme verwenden entweder einen öffentlichen oder einen lokalen DNS-Auflöser mit Zwischenspeicher. 4 | Das ist eine sehr schlechte Idee, wenn es darum geht, Spam mit DNS-basierten Blackhole-Listen (DNSBL) oder ähnlichen Techniken zu filtern. 5 | Die meisten, wenn nicht alle Anbieter wenden eine Ratenbegrenzung an, die auf dem DNS-Resolver basiert, der für die Abfrage ihres Dienstes verwendet wird. 6 | Wenn Sie einen öffentlichen Resolver wie Google 4x8, OpenDNS oder einen anderen gemeinsam genutzten DNS-Resolver wie den Ihres Internetanbieters verwenden, werden Sie diese Grenze sehr bald erreichen. -------------------------------------------------------------------------------- /docs/manual-guides/u_e-why_unbound.en.md: -------------------------------------------------------------------------------- 1 | For DNS blacklist lookups and DNSSEC. 2 | 3 | Most systems use either a public or a local caching DNS resolver. 4 | That's a very bad idea when it comes to filter spam using DNS-based black hole lists (DNSBL) or similar technics. 5 | Most if not all providers apply a rate limit based on the DNS resolver that is used to query their service. 6 | Using a public resolver like Googles 4x8, OpenDNS or any other shared DNS resolver like your ISPs will hit that limit very soon. -------------------------------------------------------------------------------- /docs/models/model-acl.de.md: -------------------------------------------------------------------------------- 1 | Die Bearbeitung eines Domänenadministrators oder eines Mailboxbenutzers ermöglicht es, Einschränkungen für dieses Konto festzulegen. 2 | 3 | **Wichtig**: Bei sich überschneidenden Modulen wie Synchronisierungsaufträgen, auf die sowohl Domänenadministratoren als auch Mailbox-Benutzer Zugriff erhalten können, werden die Rechte des Domänenadministrators geerbt, wenn man sich als Mailbox-Benutzer anmeldet. 4 | 5 | Einige Beispiele: 6 | 7 | 1. 8 | 9 | - Ein Domänenadministrator hat **keinen** Zugriff auf Synchronisierungsaufträge, kann sich aber als Mailbox-Benutzer anmelden 10 | - Wenn er sich als Mailbox-Benutzer anmeldet, erhält er keinen Zugriff auf Synchronisierungsaufträge, auch wenn der betreffende Mailbox-Benutzer bei der direkten Anmeldung Zugriff _hat_. 11 | 12 | 2. 13 | 14 | - Ein Domänenadministrator **hat** Zugriff auf Synchronisierungsaufträge und kann sich als Postfachbenutzer anmelden 15 | - Der Mailbox-Benutzer, als der er sich anzumelden versucht, hat **keinen** Zugang zu Synchronisierungsaufträgen 16 | - Der Domänenadministrator, der nun als Mailbox-Benutzer angemeldet ist, erbt die Berechtigung des Mailbox-Benutzers und kann auf Synchronisierungsaufträge zugreifen. 17 | 18 | 3. 19 | 20 | - Ein Domänenadministrator meldet sich als Mailbox-Benutzer an 21 | - Jede Berechtigung, die **nicht** in der ACL eines Domänenadministrators vorhanden ist, wird automatisch gewährt (Beispiel: zeitlich begrenzter Alias, TLS-Richtlinie usw.) -------------------------------------------------------------------------------- /docs/models/model-acl.en.md: -------------------------------------------------------------------------------- 1 | Editing a domain administrator or a mailbox user allows to set restrictions to that account. 2 | 3 | **Important**: For overlapping modules like sync jobs, which both domain administrators and mailbox users can be granted access to, the domain administrators permissions are inherited, when logging in as mailbox user. 4 | 5 | Some examples: 6 | 7 | 1. 8 | 9 | - A domain administror has **not** access to sync jobs but can login as mailbox user 10 | - When logging in as mailbox user, he does not gain access to sync jobs, even if the given mailbox user _has_ access when logging in directly 11 | 12 | 2. 13 | 14 | - A domain administror **has** access to sync jobs and can login as mailbox user 15 | - The mailbox user he tries to login as has **not** access to sync jobs 16 | - The domain administrator, now logged in as mailbox user, inherits its permission to the mailbox user and can access sync jobs 17 | 18 | 3. 19 | 20 | - A domain administrator logs in as mailbox user 21 | - Every permission, that does **not** exist in a domain administrators ACL, is automatically granted (example: time-limited alias, TLS policy etc.) -------------------------------------------------------------------------------- /docs/models/model-passwd.de.md: -------------------------------------------------------------------------------- 1 | ## Vollständig unterstützte Hashing-Methoden 2 | 3 | Die aktuellste Version von mailcow unterstützt die folgenden Hashing-Methoden vollständig. 4 | Die Standard-Hashing-Methode ist fett geschrieben: 5 | 6 | - **BLF-CRYPT** 7 | - SSHA 8 | - SSHA256 9 | - SSHA512 10 | 11 | Die obigen Methoden können in `mailcow.conf` als `MAILCOW_PASS_SCHEME` Wert verwendet werden. 12 | 13 | ## Nur-Lese-Hashing-Methoden 14 | 15 | Die folgenden Methoden werden **nur lesend** unterstützt. 16 | Wenn Sie planen, SOGo zu benutzen (wie standardmäßig), benötigen Sie eine SOGo-kompatible Hash-Methode. Bitte beachten Sie den Hinweis am Ende dieser Seite, wie Sie die Ansicht bei Bedarf aktualisieren können. 17 | Wenn SOGo deaktiviert ist, können alle unten aufgeführten Hashing-Methoden von mailcow und Dovecot gelesen werden. 18 | 19 | - ARGON2I (SOGo kompatibel) 20 | - ARGON2ID (SOGo kompatibel) 21 | - CLEAR 22 | - CLEARTEXT 23 | - CRYPT (SOGo-kompatibel) 24 | - DES-CRYPT 25 | - LDAP-MD5 (SOGo-kompatibel) 26 | - MD5 (SOGo-kompatibel) 27 | - MD5-CRYPT (SOGo-kompatibel) 28 | - PBKDF2 (SOGo-kompatibel) 29 | - PLAIN (SOGo-kompatibel) 30 | - PLAIN-MD4 31 | - PLAIN-MD5 32 | - PLAIN-TRUNC 33 | - SHA (SOGo-kompatibel) 34 | - SHA1 (SOGo-kompatibel) 35 | - SHA256 (SOGo-kompatibel) 36 | - SHA256-CRYPT (SOGo-kompatibel) 37 | - SHA512 (SOGo-kompatibel) 38 | - SHA512-CRYPT (SOGo-kompatibel) 39 | - SMD5 (SOGo kompatibel) 40 | 41 | Das bedeutet, mailcow ist in der Lage, Nutzer mit einem Hash wie `{MD5}1a1dc91c907325c69271ddf0c944bc72` aus der Datenbank zu verifizieren. 42 | 43 | Der Wert von `MAILCOW_PASS_SCHEME` wird _immer_ verwendet, um neue Passwörter zu verschlüsseln. 44 | 45 | --- 46 | 47 | > Ich habe die Passwort-Hashes in der SQL-Tabelle "Mailbox" geändert und kann mich nicht anmelden. 48 | 49 | Eine "Ansicht" muss aktualisiert werden. Sie können dies durch einen Neustart von sogo-mailcow auslösen: 50 | 51 | === "docker compose (Plugin)" 52 | 53 | ``` bash 54 | docker compose restart sogo-mailcow 55 | ``` 56 | 57 | === "docker-compose (Standalone)" 58 | 59 | ``` bash 60 | docker-compose restart sogo-mailcow 61 | ``` -------------------------------------------------------------------------------- /docs/models/model-passwd.en.md: -------------------------------------------------------------------------------- 1 | ## Fully supported hashing methods 2 | 3 | The most current mailcow fully supports the following hashing methods. 4 | The default hashing method is written in bold: 5 | 6 | - **BLF-CRYPT** 7 | - SSHA 8 | - SSHA256 9 | - SSHA512 10 | 11 | The methods above can be used in `mailcow.conf` as `MAILCOW_PASS_SCHEME` value. 12 | 13 | ## Read-only hashing methods 14 | 15 | The following methods are supported **read only**. 16 | If you plan to use SOGo (as per default), you need a SOGo compatible hashing method. Please see the note at the bottom of this page how to update the view if necessary. 17 | With SOGo disabled, all hashing methods below will be able to be read by mailcow and Dovecot. 18 | 19 | - ARGON2I (SOGo compatible) 20 | - ARGON2ID (SOGo compatible) 21 | - CLEAR 22 | - CLEARTEXT 23 | - CRYPT (SOGo compatible) 24 | - DES-CRYPT 25 | - LDAP-MD5 (SOGo compatible) 26 | - MD5 (SOGo compatible) 27 | - MD5-CRYPT (SOGo compatible) 28 | - PBKDF2 (SOGo compatible) 29 | - PLAIN (SOGo compatible) 30 | - PLAIN-MD4 31 | - PLAIN-MD5 32 | - PLAIN-TRUNC 33 | - SHA (SOGo compatible) 34 | - SHA1 (SOGo compatible) 35 | - SHA256 (SOGo compatible) 36 | - SHA256-CRYPT (SOGo compatible) 37 | - SHA512 (SOGo compatible) 38 | - SHA512-CRYPT (SOGo compatible) 39 | - SMD5 (SOGo compatible) 40 | 41 | That means mailcow is able to verify users with a hash like `{MD5}1a1dc91c907325c69271ddf0c944bc72` from the database. 42 | 43 | The value of `MAILCOW_PASS_SCHEME` will _always_ be used to encrypt new passwords. 44 | 45 | --- 46 | 47 | > I changed the password hashes in the "mailbox" SQL table and cannot login. 48 | 49 | A "view" needs to be updated. You can trigger this by restarting sogo-mailcow: 50 | 51 | === "docker compose (Plugin)" 52 | 53 | ``` bash 54 | docker compose restart sogo-mailcow 55 | ``` 56 | 57 | === "docker-compose (Standalone)" 58 | 59 | ``` bash 60 | docker-compose restart sogo-mailcow 61 | ``` -------------------------------------------------------------------------------- /docs/models/model-sender_rcv.de.md: -------------------------------------------------------------------------------- 1 | Wenn eine Mailbox erstellt wird, kann ein Benutzer Mails von seiner eigenen Mailboxadresse senden und empfangen. 2 | 3 | Die Mailbox me@example.org wird erstellt. example.org ist eine primäre Domäne. 4 | Hinweis: Eine Mailbox kann nicht in einer Alias-Domäne erstellt werden. 5 | 6 | me@example.org ist nur als me@example.org bekannt. 7 | me@example.org darf als me@example.org senden. 8 | 9 | Wir können eine Alias-Domäne für example.org hinzufügen: 10 | 11 | Die Alias-Domäne alias.com wird hinzugefügt und der primären Domäne example.org zugewiesen. 12 | me@example.org ist nun als me@example.org und me@alias.com bekannt. 13 | me@example.org darf nun als me@example.org und me@alias.com senden. 14 | 15 | Wir können Aliase für eine Mailbox hinzufügen, um Mails von dieser neuen Adresse zu empfangen und zu senden. 16 | 17 | Es ist wichtig zu wissen, dass Sie nicht in der Lage sind, Mails für `my-alias@my-alias-domain.tld` zu empfangen. Sie müssen diesen speziellen Alias erstellen. 18 | 19 | me@example.org wird der Alias alias@example.org zugewiesen. 20 | me@example.org ist jetzt bekannt als me@example.org, me@alias.com, alias@example.org 21 | 22 | me@example.org ist NICHT als alias@alias.com bekannt. 23 | 24 | Bitte beachten Sie, dass dies nicht für "catch-all"-Aliasnamen gilt: 25 | 26 | Die Alias-Domäne alias.com wird hinzugefügt und der primären Domäne example.org zugewiesen 27 | me@example.org wird der Catch-all-Alias @example.org zugewiesen 28 | me@example.org ist weiterhin nur als me@example.org bekannt, was die einzige verfügbare send-as Option ist. 29 | 30 | Jede an alias.com gesendete E-Mail wird mit dem Catch-All-Alias für example.org übereinstimmen. 31 | 32 | Administratoren und Domänenadministratoren können Postfächer bearbeiten, um bestimmten Benutzern zu erlauben, als andere Postfachbenutzer zu senden (sie zu "delegieren"). 33 | 34 | Sie können zwischen Mailbox-Benutzern wählen oder die Absenderprüfung für Domänen komplett deaktivieren. 35 | 36 | ### SOGo "Mail von"-Adressen 37 | 38 | Mailbox-Benutzer können natürlich ihre eigene Mailbox-Adresse auswählen, sowie alle Alias-Adressen und Aliase, die über Alias-Domänen existieren. 39 | 40 | Wenn Sie einen anderen _existierenden_ Mailbox-Benutzer als Ihre "Mail von"-Adresse auswählen wollen, muss dieser Benutzer Ihnen den Zugriff über SOGo delegieren (siehe SOGo-Dokumentation). Außerdem muss ein mailcow (Domain) Administrator 41 | Ihnen den Zugang wie oben beschrieben gewähren. -------------------------------------------------------------------------------- /docs/models/model-sender_rcv.en.md: -------------------------------------------------------------------------------- 1 | When a mailbox is created, a user is allowed to send mail from and receive mail for his own mailbox address. 2 | 3 | Mailbox me@example.org is created. example.org is a primary domain. 4 | Note: a mailbox cannot be created in an alias domain. 5 | 6 | me@example.org is only known as me@example.org. 7 | me@example.org is allowed to send as me@example.org. 8 | 9 | We can add an alias domain for example.org: 10 | 11 | Alias domain alias.com is added and assigned to primary domain example.org. 12 | me@example.org is now known as me@example.org and me@alias.com. 13 | me@example.org is now allowed to send as me@example.org and me@alias.com. 14 | 15 | We can add aliases for a mailbox to receive mail for and to send from this new address. 16 | 17 | It is important to know, that you are not able to receive mail for `my-alias@my-alias-domain.tld`. You would need to create this particular alias. 18 | 19 | me@example.org is assigned the alias alias@example.org 20 | me@example.org is now known as me@example.org, me@alias.com, alias@example.org 21 | 22 | me@example.org is NOT known as alias@alias.com. 23 | 24 | Please note that this does not apply to catch-all aliases: 25 | 26 | Alias domain alias.com is added and assigned to primary domain example.org 27 | me@example.org is assigned the catch-all alias @example.org 28 | me@example.org is still just known as me@example.org, which is the only available send-as option 29 | 30 | Any email send to alias.com will match the catch-all alias for example.org 31 | 32 | Administrators and domain administrators can edit mailboxes to allow specific users to send as other mailbox users ("delegate" them). 33 | 34 | You can choose between mailbox users or completely disable the sender check for domains. 35 | 36 | ### SOGo "mail from" addresses 37 | 38 | Mailbox users can, obviously, select their own mailbox address, as well as all alias addresses and aliases that exist through alias domains. 39 | 40 | If you want to select another _existing_ mailbox user as your "mail from" address, this user has to delegate you access through SOGo (see SOGo documentation). Moreover a mailcow (domain) administrator 41 | needs to grant you access as described above. -------------------------------------------------------------------------------- /docs/post_installation/firststeps-authorize_watchdog_and_bounces.de.md: -------------------------------------------------------------------------------- 1 | mailcow verwendet `MAILCOW_HOSTNAME` als Absenderdomain, um Watchdog-Benachrichtigungen zu senden und Bounce-E-Mails zu erstellen. 2 | 3 | 1. `WATCHDOG_NOTIFY_EMAIL` sollte auf **externe** Empfänger verweisen, die von einem anderen Mailserver verwaltet werden. Dies ist **sehr** wichtig, da der Watchdog über Systemausfälle informiert, und im Falle eines solchen Ausfalls wäre Ihre Instanz möglicherweise nicht in der Lage, diese Benachrichtigung zu empfangen oder anzuzeigen. 4 | 5 | 2. Da der Watchdog so konzipiert ist, dass er in allen Situationen funktioniert, einschließlich Fällen, in denen Postfix, Rspamd oder Redis nicht funktionieren, senden wir E-Mails direkt über den Watchdog-Container an den Empfänger-MX, ohne DKIM-Signierung. 6 | 7 | Um Watchdog-Benachrichtigungen und Bounces ordnungsgemäß an externe Mailserver zu senden, müssen Sie SPF und DMARC für `MAILCOW_HOSTNAME` konfigurieren (ersetzen Sie `mail.example.com` und die IPs entsprechend Ihrer Konfiguration): 8 | 9 | ``` 10 | _dmarc.mail.example.com IN TXT "v=DMARC1; p=reject" 11 | mail.example.com IN TXT "v=spf1 ip4:192.0.2.146/32 ip6:2001:db8::1/128 -all" 12 | ``` 13 | 14 | !!! info "Hinweis" 15 | Wenn Sie möchten, können Sie dieses SPF später als Include für andere Domains verwenden, wie zum Beispiel: 16 | 17 | ``` 18 | example.com IN TXT "v=spf1 include:mail.example.com -all" 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/post_installation/firststeps-authorize_watchdog_and_bounces.en.md: -------------------------------------------------------------------------------- 1 | mailcow uses `MAILCOW_HOSTNAME` as the sender domain to send watchdog notifications and compose bounce emails. 2 | 3 | 1. `WATCHDOG_NOTIFY_EMAIL` should point to **external** recipients, managed by another mail server. This is **very** important because the watchdog notifies you about system outages. If this happens, your instance might not be capable of accepting or displaying this notification. 4 | 2. Since the watchdog is designed to work in any situation, including cases when Postfix, Rspamd, or Redis is not functioning, we send emails directly via the watchdog container to the recipient's MX without any DKIM signing. 5 | 6 | To properly send watchdog notifications and bounces to external mail servers, you need to configure SPF and DMARC for `MAILCOW_HOSTNAME` (replace `mail.example.com` and the IPs to reflect your setup): 7 | 8 | ``` 9 | _dmarc.mail.example.com IN TXT "v=DMARC1; p=reject" 10 | mail.example.com IN TXT "v=spf1 ip4:192.0.2.146/32 ip6:2001:db8::1/128 -all" 11 | ``` 12 | 13 | !!! info 14 | If you want, later you can use this SPF as an include on other domains as: 15 | ``` 16 | example.com IN TXT "v=spf1 include:mail.example.com -all" 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/post_installation/firststeps-local_mta.de.md: -------------------------------------------------------------------------------- 1 | Die einfachste Möglichkeit wäre, den Listener an Port 25/tcp zu deaktivieren. 2 | 3 | **Postfix**-Benutzer deaktivieren den Listener, indem sie die folgende Zeile (beginnend mit `smtp` oder `25`) in `/etc/postfix/master.cf` auskommentieren: 4 | ``` 5 | #smtp inet n - - - - smtpd 6 | ``` 7 | 8 | Außerdem, um über eine Dockerized mailcow weiterzuleiten, sollten Sie `172.22.1.1` als Relayhost hinzufügen und das Docker-Interface aus "inet_interfaces" entfernen: 9 | 10 | ``` 11 | postconf -e 'relayhost = 172.22.1.1' 12 | postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128" 13 | postconf -e "inet_interfaces = loopback-only" 14 | postconf -e "relay_transport = relay" 15 | postconf -e "default_transport = smtp" 16 | ``` 17 | 18 | **Jetzt ist es wichtig**, dass Sie nicht denselben FQDN in `myhostname` haben, den Sie für Ihre mailcow verwenden. Prüfen Sie Ihre lokale (nicht-Docker) Postfix' main.cf auf `myhostname` und setzen Sie ihn auf etwas anderes, zum Beispiel `local.my.fqdn.tld`. 19 | 20 | "172.22.1.1" ist das von mailcow erstellte Netzwerk-Gateway in Docker. 21 | Das Relaying über diese Schnittstelle ist notwendig (anstatt - zum Beispiel - direkt über ${MAILCOW_HOSTNAME}), um über ein bekanntes internes Netzwerk weiterzuleiten. 22 | 23 | Starten Sie Postfix neu, nachdem Sie Ihre Änderungen vorgenommen haben. -------------------------------------------------------------------------------- /docs/post_installation/firststeps-local_mta.en.md: -------------------------------------------------------------------------------- 1 | The easiest option would be to disable the listener on port 25/tcp. 2 | 3 | **Postfix** users disable the listener by commenting the following line (starting with `smtp` or `25`) in `/etc/postfix/master.cf`: 4 | ``` 5 | #smtp inet n - - - - smtpd 6 | ``` 7 | 8 | Furthermore, to relay over a dockerized mailcow, you may want to add `172.22.1.1` as relayhost and remove the Docker interface from "inet_interfaces": 9 | 10 | ``` 11 | postconf -e 'relayhost = 172.22.1.1' 12 | postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128" 13 | postconf -e "inet_interfaces = loopback-only" 14 | postconf -e "relay_transport = relay" 15 | postconf -e "default_transport = smtp" 16 | ``` 17 | 18 | **Now it is important** to not have the same FQDN in `myhostname` as you use for your dockerized mailcow. Check your local (non-Docker) Postfix' main.cf for `myhostname` and set it to something different, for example `local.my.fqdn.tld`. 19 | 20 | "172.22.1.1" is the mailcow created network gateway in Docker. 21 | Relaying over this interface is necessary (instead of - for example - relaying directly over ${MAILCOW_HOSTNAME}) to relay over a known internal network. 22 | 23 | Restart Postfix after applying your changes. -------------------------------------------------------------------------------- /docs/post_installation/firststeps-snat.de.md: -------------------------------------------------------------------------------- 1 | SNAT wird verwendet, um die Quelladresse der von mailcow gesendeten Pakete zu ändern. 2 | Es kann verwendet werden, um die ausgehende IP-Adresse auf Systemen mit mehreren IP-Adressen zu ändern. 3 | 4 | Öffnen Sie `mailcow.conf`, setzen Sie einen oder beide der folgenden Parameter: 5 | 6 | ``` 7 | # Benutze diese IPv4 für ausgehende Verbindungen (SNAT) 8 | SNAT_TO_SOURCE=1.2.3.4 9 | 10 | # Benutze dieses IPv6 für ausgehende Verbindungen (SNAT) 11 | SNAT6_TO_SOURCE=dead:beef 12 | ``` 13 | 14 | Führen Sie folgendes aus: 15 | 16 | === "docker compose (Plugin)" 17 | 18 | ``` bash 19 | docker compose up -d 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose up -d 26 | ``` 27 | 28 | Die Werte werden von netfilter-mailcow gelesen. netfilter-mailcow stellt sicher, dass die Post-Routing-Regeln auf Position 1 in der Netfilter-Tabelle stehen. Es löscht sie automatisch und legt sie neu an, wenn sie an einer anderen Position als 1 gefunden werden. 29 | 30 | Überprüfen Sie die Ausgabe mit hilfe des folgendem Befehles um sicherzustellen, dass die SNAT-Einstellungen angewendet wurden: 31 | 32 | === "docker compose (Plugin)" 33 | 34 | ``` bash 35 | docker compose logs --tail=200 netfilter-mailcow 36 | ``` 37 | 38 | === "docker-compose (Standalone)" 39 | 40 | ``` bash 41 | docker-compose logs --tail=200 netfilter-mailcow 42 | ``` -------------------------------------------------------------------------------- /docs/post_installation/firststeps-snat.en.md: -------------------------------------------------------------------------------- 1 | SNAT is used to change the source address of the packets sent by mailcow. 2 | It can be used to change the outgoing IP address on systems with multiple IP addresses. 3 | 4 | Open `mailcow.conf`, set either or both of the following parameters: 5 | 6 | ``` 7 | # Use this IPv4 for outgoing connections (SNAT) 8 | SNAT_TO_SOURCE=1.2.3.4 9 | 10 | # Use this IPv6 for outgoing connections (SNAT) 11 | SNAT6_TO_SOURCE=dead:beef 12 | ``` 13 | 14 | Run the command: 15 | 16 | === "docker compose (Plugin)" 17 | 18 | ``` bash 19 | docker compose up -d 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose up -d 26 | ``` 27 | 28 | The values are read by netfilter-mailcow. netfilter-mailcow will make sure, the post-routing rules are on position 1 in the netfilter table. It does automatically delete and re-create them if they are found on another position than 1. 29 | 30 | Check the output with the following command to ensure the SNAT settings have been applied: 31 | 32 | === "docker compose (Plugin)" 33 | 34 | ``` bash 35 | docker compose logs --tail=200 netfilter-mailcow 36 | ``` 37 | 38 | === "docker-compose (Standalone)" 39 | 40 | ``` bash 41 | docker-compose logs --tail=200 netfilter-mailcow 42 | ``` -------------------------------------------------------------------------------- /docs/post_installation/firststeps-sync_jobs_migration.de.md: -------------------------------------------------------------------------------- 1 | Sync-Jobs dienen dazu, bestehende E-Mails entweder von einem externen IMAP-Server oder zwischen bestehenden Mailboxen innerhalb von mailcow zu kopieren oder zu verschieben. 2 | 3 | !!! warning "Hinweis" 4 | Abhängig von den Zugriffsrechten (ACL) Ihrer Mailbox kann es sein, dass Sie keinen Sync-Job erstellen können. Wenden Sie sich in diesem Fall bitte an Ihren Domain-Administrator. 5 | 6 | ## Einrichten eines Sync-Jobs 7 | 8 | 1. Navigieren Sie zu „E-Mail :material-arrow-right: Konfiguration :material-arrow-right: Synchronisationen“ (bei Anmeldung als Admin oder Domain-Admin) oder zu „Benutzereinstellungen :material-arrow-right: Sync-Jobs“ (als normaler Mailbox-Nutzer), um einen neuen Sync-Job zu erstellen. 9 | 10 | 2. Wenn Sie als Administrator angemeldet sind, wählen Sie im Dropdown-Menü „Benutzername“ die Mailbox aus, in die die E-Mails kopiert werden sollen (Ziel-Mailbox). 11 | 12 | 3. Tragen Sie in den Feldern „Host“ und „Port“ die korrekten Verbindungsdaten des Quell-IMAP-Servers ein (von dem die E-Mails übertragen werden sollen). 13 | 14 | 4. Geben Sie unter „Benutzername“ und „Passwort“ die Zugangsdaten des Quellservers ein. 15 | 16 | 5. Wählen Sie die passende Verschlüsselungsmethode. Für Port 143 ist in der Regel TLS korrekt, während Port 993 meist mit SSL verwendet wird. Die Nutzung von PLAIN-Authentifizierung ist möglich, wird aber dringend abgeraten. 17 | 18 | 6. Alle weiteren Felder können bei den Standardwerten belassen oder nach Bedarf angepasst werden. 19 | 20 | 7. Aktivieren Sie das Kontrollkästchen „Aktiv“ und klicken Sie anschließend auf „Hinzufügen“. 21 | 22 | !!! notice "Denken Sie dran..." 23 | Nach dem Einrichten sollten Sie sich in der Ziel-Mailbox anmelden und prüfen, ob alle E-Mails korrekt importiert wurden. Wenn alles erfolgreich war, befinden sich alle Nachrichten im neuen Postfach. Vergessen Sie nicht, den Sync-Job zu deaktivieren oder zu löschen, sobald er nicht mehr benötigt wird. -------------------------------------------------------------------------------- /docs/post_installation/firststeps-sync_jobs_migration.en.md: -------------------------------------------------------------------------------- 1 | Sync jobs are used to copy or move existing emails either from an external IMAP server or between existing mailboxes within mailcow. 2 | 3 | !!! warning "Notice" 4 | Depending on your mailbox’s access control list (ACL), you may not have permission to create a sync job. In this case, please contact your domain administrator. 5 | 6 | ## Creating a Sync Job 7 | 8 | 1. Navigate to “E-Mail :material-arrow-right: Configuration :material-arrow-right: Synchronizations” (if logged in as an admin or domain admin) or “User Settings :material-arrow-right: Sync Jobs” (as a regular mailbox user) to create a new sync job. 9 | 10 | 2. If you are an administrator, select the mailbox username from the “Username” dropdown menu where the emails should be copied to (target mailbox). 11 | 12 | 3. Fill in the “Host” and “Port” fields with the correct connection details of the source IMAP server (the server from which the emails will be fetched). 13 | 14 | 4. Enter the correct login credentials for the source IMAP server in the “Username” and “Password” fields. 15 | 16 | 5. Select the appropriate encryption method. If the source IMAP server uses port 143, TLS is likely the correct choice, while SSL is typically used with port 993. PLAIN authentication is also possible, but strongly discouraged. 17 | 18 | 6. All other fields can be left at their default values or adjusted as needed. 19 | 20 | 7. Make sure to check the “Active” box and click “Add” to finalize the sync job. 21 | 22 | !!! notice "Please remember..." 23 | Once you’re done, log in to the target mailbox and verify that all emails were imported correctly. If everything worked as expected, all your emails will appear in the new inbox. Don’t forget to disable or delete the sync job once it’s no longer needed. -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-apache24.de.md: -------------------------------------------------------------------------------- 1 | !!! warning "Wichtig" 2 | Lesen Sie zuerst [die Übersicht](r_p.md). 3 | 4 | Erforderliche Module: 5 | ``` 6 | a2enmod rewrite proxy proxy_http headers ssl 7 | ``` 8 | 9 | Let's Encrypt wird unserem Rewrite folgen, Zertifikatsanfragen in mailcow werden problemlos funktionieren. 10 | 11 | **Die hervorgehobenen Zeilen müssen beachtet werden**. 12 | 13 | ``` apache hl_lines="2 10 11 17 22 23 24 25 30 31" 14 | 15 | ServerName ZU MAILCOW HOSTNAMEN ÄNDERN 16 | ServerAlias autodiscover.* 17 | ServerAlias autoconfig.* 18 | RewriteEngine on 19 | 20 | RewriteCond %{HTTPS} off 21 | RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L] 22 | 23 | ProxyPass / http://127.0.0.1:8080/ 24 | ProxyPassReverse / http://127.0.0.1:8080/ 25 | ProxyPreserveHost On 26 | ProxyAddHeaders On 27 | RequestHeader set X-Forwarded-Proto "http" 28 | 29 | 30 | ServerName ZU MAILCOW HOSTNAMEN ÄNDERN 31 | ServerAlias autodiscover.* 32 | ServerAlias autoconfig.* 33 | 34 | # You should proxy to a plain HTTP session to offload SSL processing 35 | ProxyPass /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync connectiontimeout=4000 36 | ProxyPassReverse /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync 37 | ProxyPass / http://127.0.0.1:8080/ 38 | ProxyPassReverse / http://127.0.0.1:8080/ 39 | ProxyPreserveHost On 40 | ProxyAddHeaders On 41 | RequestHeader set X-Forwarded-Proto "https" 42 | 43 | SSLCertificateFile MAILCOW_ORDNER/data/assets/ssl/cert.pem 44 | SSLCertificateKeyFile MAILCOW_ORDNER/data/assets/ssl/key.pem 45 | 46 | # Wenn Sie einen HTTPS-Host als Proxy verwenden möchten: 47 | #SSLProxyEngine On 48 | 49 | # Wenn Sie einen Proxy für einen nicht vertrauenswürdigen HTTPS-Host einrichten wollen: 50 | #SSLProxyVerify none 51 | #SSLProxyCheckPeerCN off 52 | #SSLProxyCheckPeerName off 53 | #SSLProxyCheckPeerExpire off 54 | 55 | ``` 56 | -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-apache24.en.md: -------------------------------------------------------------------------------- 1 | !!! warning "Important" 2 | First read [the overview](r_p.md). 3 | 4 | Required modules: 5 | ``` 6 | a2enmod rewrite proxy proxy_http headers ssl 7 | ``` 8 | 9 | Let's Encrypt will follow our rewrite, certificate requests in mailcow will work fine. 10 | 11 | **Take care of highlighted lines.** 12 | 13 | ``` apache hl_lines="2 10 11 17 22 23 24 25 30 31" 14 | 15 | ServerName CHANGE_TO_MAILCOW_HOSTNAME 16 | ServerAlias autodiscover.* 17 | ServerAlias autoconfig.* 18 | RewriteEngine on 19 | 20 | RewriteCond %{HTTPS} off 21 | RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L] 22 | 23 | ProxyPass / http://127.0.0.1:8080/ 24 | ProxyPassReverse / http://127.0.0.1:8080/ 25 | ProxyPreserveHost On 26 | ProxyAddHeaders On 27 | RequestHeader set X-Forwarded-Proto "http" 28 | 29 | 30 | ServerName CHANGE_TO_MAILCOW_HOSTNAME 31 | ServerAlias autodiscover.* 32 | ServerAlias autoconfig.* 33 | 34 | # You should proxy to a plain HTTP session to offload SSL processing 35 | ProxyPass /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync connectiontimeout=4000 36 | ProxyPassReverse /Microsoft-Server-ActiveSync http://127.0.0.1:8080/Microsoft-Server-ActiveSync 37 | ProxyPass / http://127.0.0.1:8080/ 38 | ProxyPassReverse / http://127.0.0.1:8080/ 39 | ProxyPreserveHost On 40 | ProxyAddHeaders On 41 | RequestHeader set X-Forwarded-Proto "https" 42 | 43 | SSLCertificateFile MAILCOW_PATH/data/assets/ssl/cert.pem 44 | SSLCertificateKeyFile MAILCOW_PATH/data/assets/ssl/key.pem 45 | 46 | # If you plan to proxy to a HTTPS host: 47 | #SSLProxyEngine On 48 | 49 | # If you plan to proxy to an untrusted HTTPS host: 50 | #SSLProxyVerify none 51 | #SSLProxyCheckPeerCN off 52 | #SSLProxyCheckPeerName off 53 | #SSLProxyCheckPeerExpire off 54 | 55 | ``` 56 | -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-haproxy.de.md: -------------------------------------------------------------------------------- 1 | !!! warning "Wichtig" 2 | Lesen Sie zuerst [die Übersicht](r_p.md). 3 | 4 | !!! danger "Vorsicht" 5 | Dies ist ein von der Community unterstützter Beitrag. Korrekturen sind willkommen. 6 | 7 | Dieses Beispiel leitet den gesamten HTTP-Verkehr zu HTTPS um, außer für den eingebauten ACME-Client von mailcow. 8 | Wenn Sie den eingebauten ACME-Client nicht verwenden möchten, ändern Sie bitte die Konfiguration selbst. 9 | 10 | ``` 11 | frontend https-in 12 | bind :::80 v4v6 13 | bind :::443 v4v6 ssl crt mailcow.pem 14 | 15 | acl mailcow_acme path -i -m beg /.well-known/ 16 | 17 | redirect scheme https unless { ssl_fc || mailcow_acme } 18 | 19 | default_backend mailcow 20 | 21 | backend mailcow 22 | option forwardfor 23 | http-request set-header X-Forwarded-Proto https if { ssl_fc } 24 | http-request set-header X-Forwarded-Proto http if !{ ssl_fc } 25 | server mailcow 127.0.0.1:8080 check 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-haproxy.en.md: -------------------------------------------------------------------------------- 1 | !!! warning "Important" 2 | First read [the overview](r_p.md). 3 | 4 | !!! danger 5 | This is an community supported contribution. Feel free to provide fixes. 6 | 7 | This example redirects all HTTP traffic to HTTPS except for mailcow's built-in ACME client. 8 | If you do not want to use the built-in ACME client, please modify the configuration yourself. 9 | 10 | ``` 11 | frontend https-in 12 | bind :::80 v4v6 13 | bind :::443 v4v6 ssl crt mailcow.pem 14 | 15 | acl mailcow_acme path -i -m beg /.well-known/ 16 | 17 | redirect scheme https unless { ssl_fc || mailcow_acme } 18 | 19 | default_backend mailcow 20 | 21 | backend mailcow 22 | option forwardfor 23 | http-request set-header X-Forwarded-Proto https if { ssl_fc } 24 | http-request set-header X-Forwarded-Proto http if !{ ssl_fc } 25 | server mailcow 127.0.0.1:8080 check 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-nginx.de.md: -------------------------------------------------------------------------------- 1 | !!! warning "Wichtig" 2 | Lesen Sie zuerst [die Übersicht](r_p.md). 3 | 4 | Let's Encrypt folgt unserem Rewrite, Zertifikatsanfragen funktionieren problemlos. 5 | 6 | **Achten Sie auf die hervorgehobenen Zeilen**. 7 | 8 | ``` hl_lines="4 10 12 13 25 39" 9 | server { 10 | listen 80 default_server; 11 | listen [::]:80 default_server; 12 | server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.*; 13 | return 301 https://$host$request_uri; 14 | } 15 | server { 16 | listen 443 ssl http2; 17 | listen [::]:443 ssl http2; 18 | server_name ZU MAILCOW HOSTNAMEN ÄNDERN autodiscover.* autoconfig.*; 19 | 20 | ssl_certificate MAILCOW_PATH/data/assets/ssl/cert.pem; 21 | ssl_certificate_key MAILCOW_PATH/data/assets/ssl/key.pem; 22 | ssl_session_timeout 1d; 23 | ssl_session_cache shared:SSL:50m; 24 | ssl_session_tickets off; 25 | 26 | # Siehe https://ssl-config.mozilla.org/#server=nginx für die neuesten Empfehlungen zu ssl-Einstellungen 27 | # Ein Beispiel für eine Konfiguration ist unten angegeben 28 | ssl_protocols TLSv1.2; 29 | ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA; 30 | ssl_prefer_server_ciphers off; 31 | 32 | location /Microsoft-Server-ActiveSync { 33 | proxy_pass http://127.0.0.1:8080/Microsoft-Server-ActiveSync; 34 | proxy_set_header Host $http_host; 35 | proxy_set_header X-Real-IP $remote_addr; 36 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 37 | proxy_set_header X-Forwarded-Proto $scheme; 38 | proxy_connect_timeout 75; 39 | proxy_send_timeout 3650; 40 | proxy_read_timeout 3650; 41 | proxy_buffers 64 512k; # Seit dem 2022-04 Update nötig für SOGo 42 | client_body_buffer_size 512k; 43 | client_max_body_size 0; 44 | } 45 | 46 | location / { 47 | proxy_pass http://127.0.0.1:8080/; 48 | proxy_set_header Host $http_host; 49 | proxy_set_header X-Real-IP $remote_addr; 50 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 51 | proxy_set_header X-Forwarded-Proto $scheme; 52 | client_max_body_size 0; 53 | # Die folgenden Proxy-Buffer müssen gesetzt werden, wenn Sie SOGo nach dem Update 2022-04 (April 2022) verwenden wollen 54 | # Andernfalls wird ein Login wie folgt fehlschlagen: https://github.com/mailcow/mailcow-dockerized/issues/4537 55 | proxy_buffer_size 128k; 56 | proxy_buffers 64 512k; 57 | proxy_busy_buffers_size 512k; 58 | } 59 | } 60 | ``` 61 | -------------------------------------------------------------------------------- /docs/post_installation/reverse-proxy/r_p-nginx.en.md: -------------------------------------------------------------------------------- 1 | !!! warning "Important" 2 | First read [the overview](r_p.md). 3 | 4 | Let's Encrypt will follow our rewrite, certificate requests will work fine. 5 | 6 | **Take care of highlighted lines.** 7 | 8 | ``` hl_lines="4 10 12 13 25 39" 9 | server { 10 | listen 80 default_server; 11 | listen [::]:80 default_server; 12 | server_name CHANGE_TO_MAILCOW_HOSTNAME autodiscover.* autoconfig.*; 13 | return 301 https://$host$request_uri; 14 | } 15 | server { 16 | listen 443 ssl http2; 17 | listen [::]:443 ssl http2; 18 | server_name CHANGE_TO_MAILCOW_HOSTNAME autodiscover.* autoconfig.*; 19 | 20 | ssl_certificate MAILCOW_PATH/data/assets/ssl/cert.pem; 21 | ssl_certificate_key MAILCOW_PATH/data/assets/ssl/key.pem; 22 | ssl_session_timeout 1d; 23 | ssl_session_cache shared:SSL:50m; 24 | ssl_session_tickets off; 25 | 26 | # See https://ssl-config.mozilla.org/#server=nginx for the latest ssl settings recommendations 27 | # An example config is given below 28 | ssl_protocols TLSv1.2; 29 | ssl_ciphers HIGH:!aNULL:!MD5:!SHA1:!kRSA; 30 | ssl_prefer_server_ciphers off; 31 | 32 | location /Microsoft-Server-ActiveSync { 33 | proxy_pass http://127.0.0.1:8080/Microsoft-Server-ActiveSync; 34 | proxy_set_header Host $http_host; 35 | proxy_set_header X-Real-IP $remote_addr; 36 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 37 | proxy_set_header X-Forwarded-Proto $scheme; 38 | proxy_connect_timeout 75; 39 | proxy_send_timeout 3650; 40 | proxy_read_timeout 3650; 41 | proxy_buffers 64 512k; # Needed since the 2022-04 Update for SOGo 42 | client_body_buffer_size 512k; 43 | client_max_body_size 0; 44 | } 45 | 46 | location / { 47 | proxy_pass http://127.0.0.1:8080/; 48 | proxy_set_header Host $http_host; 49 | proxy_set_header X-Real-IP $remote_addr; 50 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 51 | proxy_set_header X-Forwarded-Proto $scheme; 52 | client_max_body_size 0; 53 | # The following Proxy Buffers has to be set if you want to use SOGo after the 2022-04 (April 2022) Update 54 | # Otherwise a Login will fail like this: https://github.com/mailcow/mailcow-dockerized/issues/4537 55 | proxy_buffer_size 128k; 56 | proxy_buffers 64 512k; 57 | proxy_busy_buffers_size 512k; 58 | } 59 | } 60 | ``` 61 | -------------------------------------------------------------------------------- /docs/troubleshooting/debug-admin_login_sogo.en.md: -------------------------------------------------------------------------------- 1 | This is an experimental feature that allows admins and domain admins to directly 2 | log into SOGo as a mailbox user, without knowing the users password. 3 | 4 | For this, an additional link to SOGo is displayed in the mailbox list (mailcow UI). 5 | 6 | Multiple concurrent admin-logins to different mailboxes are also possible when using this feature. 7 | 8 | ## Enabling the feature 9 | 10 | The feature is disabled by default. It can be enabled in the `mailcow.conf` by setting: 11 | ``` 12 | ALLOW_ADMIN_EMAIL_LOGIN=y 13 | ``` 14 | and recreating the affected containers with 15 | 16 | === "docker compose (Plugin)" 17 | 18 | ``` bash 19 | docker compose up -d 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose up -d 26 | ``` 27 | 28 | ## Drawbacks when enabled 29 | 30 | - Each SOGo page-load and each Active-Sync request will cause an additional execution of an internal PHP script. 31 | This might impact load-times of SOGo / EAS. 32 | In most cases, this should not be noticeable but should be kept in mind if you face any performance issues. 33 | - SOGo will not display a logout link for admin-logins, to login normally one has to logout from the mailcow UI so the PHP session is destroyed. 34 | - Subscribing to another user's calendar or address book while logged in as admin does not work. Neither does inviting other users to calendar events. The page will reload when these things are attempted. 35 | 36 | ## Technical details 37 | 38 | SOGoTrustProxyAuthentication option is set to YES which makes SOGo trust the x-webobjects-remote-user header. 39 | 40 | Dovecot will receive a random master-password which is valid for all mailboxes when used by the SOGo container. 41 | 42 | Clicking on the SOGo button in the mailbox list will open sogo-auth.php which checks permissions, sets session variables and redirects to the SOGo mailbox. 43 | 44 | Each SOGo, CardDAV, CalDAV and EAS http request will cause an additional, nginx internal auth_request call to sogo-auth.php with the following behavior: 45 | 46 | - If a basic_auth header is present, the script will validate the credentials in place of SOGo and provide the following headers: 47 | `x-webobjects-remote-user`, `Authorization` and `x-webobjects-auth-type`. 48 | 49 | - If no basic_auth header is present, the script will check for an active mailcow admin session for the requested email user and provide the same headers but with the dovecot master password used in the `Authorization` header. 50 | 51 | - If both fails the headers will be set empty, which makes SOGo use its standard authentication methods. 52 | 53 | All of these options / behaviors are disabled if the `ALLOW_ADMIN_EMAIL_LOGIN` is not enabled in the config. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-attach_service.de.md: -------------------------------------------------------------------------------- 1 | ## Anhängen eines Containers an Ihre Shell 2 | 3 | Um einen Container an Ihre Shell anzuhängen, können Sie einfach folgendes ausführen 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | docker compose exec $Dienst_Name /bin/bash 9 | ``` 10 | 11 | === "docker-compose (Standalone)" 12 | 13 | ``` bash 14 | docker-compose exec $Dienst_Name /bin/bash 15 | ``` 16 | 17 | ### Verbindung zu Diensten herstellen 18 | 19 | Wenn Sie sich direkt mit einem Dienst / einer Anwendung verbinden wollen, ist es immer eine gute Idee, `source mailcow.conf` zu benutzen, um alle relevanten Variablen in Ihre Umgebung zu bekommen. 20 | 21 | #### MySQL 22 | 23 | 24 | === "docker compose (Plugin)" 25 | 26 | ``` bash 27 | source mailcow.conf 28 | docker compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} 29 | ``` 30 | 31 | === "docker-compose (Standalone)" 32 | 33 | ``` bash 34 | source mailcow.conf 35 | docker-compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME} 36 | ``` 37 | 38 | #### Redis 39 | 40 | === "docker compose (Plugin)" 41 | 42 | ``` bash 43 | docker compose exec redis-mailcow redis-cli 44 | ``` 45 | 46 | === "docker-compose (Standalone)" 47 | 48 | ``` bash 49 | docker-compose exec redis-mailcow redis-cli 50 | ``` 51 | 52 | ## Dienstbeschreibungen 53 | 54 | Hier ist eine kurze Übersicht, welcher Container / Dienst was macht: 55 | 56 | | Dienstname | Dienstbeschreibungen | 57 | | ----------------- | ------------------------------------------------------------------------- | 58 | | unbound-mailcow | Lokaler (DNSSEC) DNS-Auflöser | 59 | | mysql-mailcow | Speichert die SOGo's und die meisten Einstellungen von mailcow | 60 | | postfix-mailcow | Empfängt und sendet Mails | 61 | | dovecot-mailcow | Benutzer-Logins und Siebfilter | 62 | | redis-mailcow | Speicher-Backend für DKIM-Schlüssel und Rspamd | 63 | | rspamd-mailcow | Mail-Filter-System. Verwendet für Av-Behandlung, DKIM-Signierung, Spam-Behandlung | 64 | | clamd-mailcow | Scannt Anhänge auf Viren | 65 | | olefy-mailcow | Scannt angehängte Office-Dokumente auf Makro-Viren | 66 | | solr-mailcow | Bietet Volltextsuche in Dovecot | 67 | | sogo-mailcow | Webmail-Client, der Microsoft ActiveSync und Cal- / CardDav verarbeitet | 68 | | nginx-mailcow | Nginx Remote-Proxy, der alle mailcow-bezogenen HTTP / HTTPS-Anfragen bearbeitet | 69 | | acme-mailcow | Automatisiert den Einsatz von HTTPS (SSL/TLS) Zertifikaten | 70 | | memcached-mailcow | Internes Caching-System für mailcow-Dienste | 71 | | watchdog-mailcow | Ermöglicht die Überwachung von Docker-Containern / Diensten | 72 | | php-fpm-mailcow | Betreibt die mailcow Web UI | 73 | | netfilter-mailcow | Fail2Ban ähnliche Integration | -------------------------------------------------------------------------------- /docs/troubleshooting/debug-logs.de.md: -------------------------------------------------------------------------------- 1 | !!! warning "Warnung" 2 | Dieser Abschnitt gilt nur für Docker's Standard-Logging-Treiber (JSON). 3 | 4 | Um die Logs aller mailcow: dockerized bezogenen Container zu sehen, können Sie den folgenden Befehl innerhalb Ihres mailcow-dockerized Ordners verwenden, der Ihre `mailcow.conf` enthält: 5 | 6 | === "docker compose (Plugin)" 7 | 8 | ``` bash 9 | docker compose logs 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose logs 16 | ``` 17 | 18 | Dies ist normalerweise ein bisschen viel, aber Sie können die Ausgabe mit `--tail=100` auf die letzten 100 Zeilen pro Container kürzen, oder ein `-f` hinzufügen, um die Live-Ausgabe aller Ihrer Dienste zu verfolgen. 19 | 20 | Um die Logs eines bestimmten Dienstes zu sehen, kann man folgendes verwenden: 21 | 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose logs [options] $service_name 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose logs [options] $service_name 32 | ``` 33 | 34 | !!! info 35 | Die verfügbaren Optionen für den Befehl obrigen Befehlsind: 36 | 37 | - **-no-color**: Erzeugt eine einfarbige Ausgabe. 38 | - **-f**: Der Log-Ausgabe folgen. 39 | - **-t**: Zeitstempel anzeigen. 40 | - **--tail="all "**: Anzahl der Zeilen, die ab dem Ende der Protokolle für jeden Container angezeigt werden sollen. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-logs.en.md: -------------------------------------------------------------------------------- 1 | !!! warning 2 | This section only applies for Dockers default logging driver (JSON). 3 | 4 | To view the logs of all mailcow: dockerized related containers, you can use the following command inside your mailcow-dockerized folder that contains your `mailcow.conf`. 5 | 6 | === "docker compose (Plugin)" 7 | 8 | ``` bash 9 | docker compose logs 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose logs 16 | ``` 17 | 18 | This is usually a bit much, but you could trim the output with `--tail=100` to the last 100 lines per container, or add a `-f` to follow the live output of all your services. 19 | 20 | To view the logs of a specific service you can use the following: 21 | 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose logs [options] $service_name 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose logs [options] $service_name 32 | ``` 33 | 34 | !!! info 35 | The available options for the previous commands are: 36 | 37 | - **--no-color**: Produce monochrome output. 38 | - **-f**: Follow the log output. 39 | - **-t**: Show timestamps. 40 | - **--tail="all"**: Number of lines to show from the end of the logs for each container. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-mysql_aria.de.md: -------------------------------------------------------------------------------- 1 | ## MariaDB: Aria-Wiederherstellung nach Absturz 2 | 3 | Wenn Ihr Server abgestürzt ist und MariaDB eine Fehlermeldung ähnlich `[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files`, können Sie Folgendes versuchen, um die Datenbank in einen gesunden Zustand zu bringen: 4 | 5 | Starten Sie den Stack und warten Sie, bis mysql-mailcow beginnt, einen Neustart zu melden. Überprüfen Sie dies, indem Sie den folgenden Befehl ausführen: 6 | 7 | === "docker compose (Plugin)" 8 | 9 | ``` bash 10 | docker compose ps 11 | ``` 12 | 13 | === "docker-compose (Standalone)" 14 | 15 | ``` bash 16 | docker-compose ps 17 | ``` 18 | 19 | Führen Sie nun die folgenden Befehle aus: 20 | 21 | Stoppen Sie den Stack, nicht "down" ausführen 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose stop 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose stop 32 | ``` 33 | Führen Sie eine Bash in dem gestoppten Container als Benutzer mysql aus 34 | 35 | === "docker compose (Plugin)" 36 | 37 | ``` bash 38 | docker compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow 39 | ``` 40 | 41 | === "docker-compose (Standalone)" 42 | 43 | ``` bash 44 | docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow 45 | ``` 46 | 47 | cd in das SQL-Datenverzeichnis 48 | ```bash 49 | cd /var/lib/mysql 50 | ``` 51 | 52 | aria_chk ausführen 53 | ```bash 54 | aria_chk --check --force */*.MAI 55 | ``` 56 | Löschen der aria-Logdateien 57 | ```bash 58 | rm aria_log.* 59 | ``` 60 | 61 | Führen Sie nun einen kompletten Stack neustart durch: 62 | 63 | === "docker compose (Plugin)" 64 | 65 | ``` bash 66 | docker compose down 67 | docker compose up -d 68 | ``` 69 | 70 | === "docker-compose (Standalone)" 71 | 72 | ``` bash 73 | docker-compose down 74 | docker-compose up -d 75 | ``` -------------------------------------------------------------------------------- /docs/troubleshooting/debug-mysql_aria.en.md: -------------------------------------------------------------------------------- 1 | ## MariaDB: Aria recovery after crash 2 | 3 | If your server crashed and MariaDB logs an error similar to `[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables (*.MAI) and delete all aria_log.######## files` you may want to try the following to recover the database to a healthy state: 4 | 5 | Start the stack and wait until mysql-mailcow begins to report a restart. Check this with the following command: 6 | 7 | === "docker compose (Plugin)" 8 | 9 | ``` bash 10 | docker compose ps 11 | ``` 12 | 13 | === "docker-compose (Standalone)" 14 | 15 | ``` bash 16 | docker-compose ps 17 | ``` 18 | 19 | Now exec the following commands: 20 | 21 | Stop the stack, don't run "down" 22 | === "docker compose (Plugin)" 23 | 24 | ``` bash 25 | docker compose stop 26 | ``` 27 | 28 | === "docker-compose (Standalone)" 29 | 30 | ``` bash 31 | docker-compose stop 32 | ``` 33 | Run a bash in the stopped container as user mysql 34 | 35 | === "docker compose (Plugin)" 36 | 37 | ``` bash 38 | docker compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow 39 | ``` 40 | 41 | === "docker-compose (Standalone)" 42 | 43 | ``` bash 44 | docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql bash"' mysql-mailcow 45 | ``` 46 | 47 | cd to the SQL data directory 48 | 49 | ```bash 50 | cd /var/lib/mysql 51 | ``` 52 | 53 | Run aria_chk 54 | 55 | ```bash 56 | aria_chk --check --force */*.MAI 57 | ``` 58 | 59 | Delete aria log files 60 | 61 | ```bash 62 | rm aria_log.* 63 | ``` 64 | 65 | Execute a complete stack restart using the following commands: 66 | 67 | === "docker compose (Plugin)" 68 | 69 | ``` bash 70 | docker compose down 71 | docker compose up -d 72 | ``` 73 | 74 | === "docker-compose (Standalone)" 75 | 76 | ``` bash 77 | docker-compose down 78 | docker-compose up -d 79 | ``` -------------------------------------------------------------------------------- /docs/troubleshooting/debug-mysql_upgrade.de.md: -------------------------------------------------------------------------------- 1 | ## Führen Sie ein manuelles mysql_upgrade durch. 2 | 3 | Dieser Schritt ist normalerweise nicht notwendig. 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | docker compose stop mysql-mailcow watchdog-mailcow 9 | docker compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose stop mysql-mailcow watchdog-mailcow 16 | docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow 17 | ``` 18 | 19 | Sobald die SQL-Shell gestartet wurde, führen Sie `mysql_upgrade` aus und verlassen den Container: 20 | 21 | ``` 22 | mysql_upgrade 23 | exit 24 | ``` 25 | -------------------------------------------------------------------------------- /docs/troubleshooting/debug-mysql_upgrade.en.md: -------------------------------------------------------------------------------- 1 | ## Run a manual mysql_upgrade 2 | 3 | This step is usually not necessary. 4 | 5 | === "docker compose (Plugin)" 6 | 7 | ``` bash 8 | docker compose stop mysql-mailcow watchdog-mailcow 9 | docker compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose stop mysql-mailcow watchdog-mailcow 16 | docker-compose run --rm --entrypoint '/bin/sh -c "gosu mysql mysqld --skip-grant-tables & sleep 10 && bash && exit 0"' mysql-mailcow 17 | ``` 18 | 19 | As soon as the SQL shell spawned, run `mysql_upgrade` and exit the container: 20 | 21 | ``` 22 | mysql_upgrade 23 | exit 24 | ``` -------------------------------------------------------------------------------- /docs/troubleshooting/debug-resend-quarantine-notifications.de.md: -------------------------------------------------------------------------------- 1 | Um eine Quarantäne Benachrichtigung erneut zu versenden geben Sie folgenden Befehl ein: 2 | 3 | === "docker compose (Plugin)" 4 | 5 | ``` bash 6 | docker compose exec dovecot-mailcow bash 7 | mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;" 8 | redis-cli -h redis DEL Q_LAST_NOTIFIED 9 | quarantine_notify.py 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose exec dovecot-mailcow bash 16 | mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;" 17 | redis-cli -h redis DEL Q_LAST_NOTIFIED 18 | quarantine_notify.py 19 | ``` 20 | 21 | !!! info 22 | Wir empfehlen die Verwendung dieses Befehles **NUR** zum debugging Prozess, da die Benachrichtigung im Normalfall automatisiert, anhand der pro Mailbox gesetzten Einstellungen, ausgelöst wird. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-resend-quarantine-notifications.en.md: -------------------------------------------------------------------------------- 1 | To resend a quarantine notification, enter the following command: 2 | 3 | === "docker compose (Plugin)" 4 | 5 | ``` bash 6 | docker compose exec dovecot-mailcow bash 7 | mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;" 8 | redis-cli -h redis DEL Q_LAST_NOTIFIED 9 | quarantine_notify.py 10 | ``` 11 | 12 | === "docker-compose (Standalone)" 13 | 14 | ``` bash 15 | docker-compose exec dovecot-mailcow bash 16 | mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;" 17 | redis-cli -h redis DEL Q_LAST_NOTIFIED 18 | quarantine_notify.py 19 | ``` 20 | 21 | !!! info 22 | We recommend to use this command **ONLY** for debugging process as the notification is normally triggered automatically based on the settings set for each mailbox. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-reset_tls.de.md: -------------------------------------------------------------------------------- 1 | Sollten Sie Probleme mit Ihrem Zertifikat, Schlüssel oder Let's Encrypt-Konto haben, versuchen Sie bitte, die TLS-Assets zurückzusetzen: 2 | 3 | ``` 4 | source mailcow.conf 5 | docker compose down 6 | rm -rf data/assets/ssl 7 | mkdir data/assets/ssl 8 | openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj "/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}" -sha256 -nodes 9 | cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/ 10 | docker compose up -d 11 | ``` 12 | 13 | Dies wird mailcow stoppen, die benötigten Variablen beschaffen, ein selbstsigniertes Zertifikat erstellen und mailcow starten. 14 | 15 | Wenn Sie Let's Encrypt verwenden, sollten Sie vorsichtig sein, da Sie ein neues Konto und einen neuen Satz von Zertifikaten erstellen werden. Sie werden früher oder später auf ein Ratelimit stoßen. 16 | 17 | Bitte beachten Sie auch, dass frühere TLSA-Datensätze ungültig werden. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-reset_tls.en.md: -------------------------------------------------------------------------------- 1 | In case you encounter problems with your certificate, key or Let's Encrypt account, please try to reset the TLS assets: 2 | 3 | ``` 4 | source mailcow.conf 5 | docker compose down 6 | rm -rf data/assets/ssl 7 | mkdir data/assets/ssl 8 | openssl req -x509 -newkey rsa:4096 -keyout data/assets/ssl-example/key.pem -out data/assets/ssl-example/cert.pem -days 365 -subj "/C=DE/ST=NRW/L=Willich/O=mailcow/OU=mailcow/CN=${MAILCOW_HOSTNAME}" -sha256 -nodes 9 | cp -n -d data/assets/ssl-example/*.pem data/assets/ssl/ 10 | docker compose up -d 11 | ``` 12 | 13 | This will stop mailcow, source the variables we need, create a self-signed certificate and start mailcow. 14 | 15 | If you use Let's Encrypt you should be careful as you will create a new account and a new set of certificates. You will run into a ratelimit sooner or later. 16 | 17 | Please also note that previous TLSA records will be invalid. -------------------------------------------------------------------------------- /docs/troubleshooting/debug-rm_volumes.de.md: -------------------------------------------------------------------------------- 1 | Es kann sein, dass Sie einen Satz persistenter Daten entfernen wollen, um einen Konflikt zu lösen oder um neu zu beginnen. 2 | 3 | `mailcowdockerized` kann variieren und hängt von Ihrem Compose-Projektnamen ab (wenn er unverändert ist, ist `mailcowdockerized` der richtige Wert). Wenn Sie sich unsicher sind, führen Sie `docker volume ls` aus, um eine vollständige Liste zu erhalten. 4 | 5 | Löschen Sie ein einzelnes Volume: 6 | 7 | ``` 8 | docker volume rm mailcowdockerized_${VOLUME_NAME} 9 | ``` 10 | 11 | - Entfernen Sie Volume `mysql-vol-1`, um alle MySQL-Daten zu entfernen. 12 | - Entfernen Sie Volume `redis-vol-1` um alle Redis Daten zu entfernen. 13 | - Volume `vmail-vol-1` entfernen, um alle Inhalte von `/var/vmail` zu entfernen, die in `dovecot-mailcow` eingebunden sind. 14 | - Entfernen Sie das Volume `rspamd-vol-1`, um alle Rspamd-Daten zu entfernen. 15 | - Entfernen Sie Volume `crypt-vol-1`, um alle Crypto-Daten zu entfernen. Dies wird **alle Mails** unlesbar machen. 16 | 17 | Alternativ dazu wird die Ausführung des folgenden Befehles **alle mailcow: dockerized volumes** zerstören und alle zugehörigen Container und Netzwerke löschen: 18 | 19 | === "docker compose (Plugin)" 20 | 21 | ``` bash 22 | docker compose down -v 23 | ``` 24 | 25 | === "docker-compose (Standalone)" 26 | 27 | ``` bash 28 | docker-compose down -v 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/troubleshooting/debug-rm_volumes.en.md: -------------------------------------------------------------------------------- 1 | You may want to remove a set of persistent data to resolve a conflict or to start over. 2 | 3 | `mailcowdockerized` can vary and depends on your compose project name (if it's unchanged, `mailcowdockerized` is the correct value). If you are unsure about volume names, run `docker volume ls` for a full list. 4 | 5 | Delete a single volume: 6 | 7 | ``` 8 | docker volume rm mailcowdockerized_${VOLUME_NAME} 9 | ``` 10 | 11 | - Remove volume `mysql-vol-1` to remove all MySQL data. 12 | - Remove volume `redis-vol-1` to remove all Redis data. 13 | - Remove volume `vmail-vol-1` to remove all contents of `/var/vmail` mounted to `dovecot-mailcow`. 14 | - Remove volume `rspamd-vol-1` to remove all Rspamd data. 15 | - Remove volume `crypt-vol-1` to remove all crypto data. This will render **all mails** unreadable. 16 | 17 | Alternatively, running the following command will **destroy all mailcow: dockerized volumes** and delete any related containers and networks: 18 | 19 | === "docker compose (Plugin)" 20 | 21 | ``` bash 22 | docker compose down -v 23 | ``` 24 | 25 | === "docker-compose (Standalone)" 26 | 27 | ``` bash 28 | docker-compose down -v 29 | ``` 30 | -------------------------------------------------------------------------------- /docs/troubleshooting/debug-rspamd_memory_leaks.en.md: -------------------------------------------------------------------------------- 1 | A quick guide to deeply analyze a malfunctioning Rspamd. 2 | 3 | === "docker compose (Plugin)" 4 | 5 | ``` bash 6 | docker compose exec rspamd-mailcow bash 7 | 8 | if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then 9 | sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list 10 | fi 11 | 12 | apt-get update ; apt-get upgrade rspamd 13 | 14 | nano /docker-entrypoint.sh 15 | 16 | # Add this in front of "exec "$@"": 17 | 18 | export G_SLICE=always-malloc 19 | export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0 20 | ``` 21 | 22 | === "docker-compose (Standalone)" 23 | 24 | ``` bash 25 | docker-compose exec rspamd-mailcow bash 26 | 27 | if ! grep -qi 'apt-stable-asan' /etc/apt/sources.list.d/rspamd.list; then 28 | sed -i 's/apt-stabil/apt-stabil-asan/i' /etc/apt/sources.list.d/rspamd.list 29 | fi 30 | 31 | apt-get update ; apt-get upgrade rspamd 32 | 33 | nano /docker-entrypoint.sh 34 | 35 | # Add this in front of "exec "$@"": 36 | 37 | export G_SLICE=always-malloc 38 | export ASAN_OPTIONS=new_delete_type_mismatch=0:detect_leaks=1:detect_odr_violation=0:log_path=/tmp/rspamd-asan:quarantine_size_mb=2048:malloc_context_size=8:fast_unwind_on_malloc=0 39 | ``` 40 | 41 | Restart Rspamd: 42 | 43 | === "docker compose (Plugin)" 44 | 45 | ``` bash 46 | docker compose restart rspamd-mailcow 47 | ``` 48 | 49 | === "docker-compose (Standalone)" 50 | 51 | ``` bash 52 | docker-compose restart rspamd-mailcow 53 | ``` 54 | 55 | Your memory consumption will increase by a lot, it will also steadily grow, which is not related to a possible memory leak you are looking for. 56 | 57 | Leave the container running for a few minutes, hours or days (it should match the time you usually wait for the leak to "happen") and restart it: 58 | 59 | === "docker compose (Plugin)" 60 | 61 | ``` bash 62 | docker compose restart rspamd-mailcow 63 | ``` 64 | 65 | === "docker-compose (Standalone)" 66 | 67 | ``` bash 68 | docker-compose restart rspamd-mailcow 69 | ``` 70 | 71 | Now enter the container by running the command: 72 | 73 | === "docker compose (Plugin)" 74 | 75 | ``` bash 76 | docker compose exec rspamd-mailcow bash 77 | ``` 78 | 79 | === "docker-compose (Standalone)" 80 | 81 | ``` bash 82 | docker-compose exec rspamd-mailcow bash 83 | ``` 84 | 85 | 86 | Change the directory to /tmp and copy the asan Files to your desired location or upload them via termbin.com (`cat /tmp/rspamd-asan.* | nc termbin.com 9999`). -------------------------------------------------------------------------------- /docs/troubleshooting/debug.de.md: -------------------------------------------------------------------------------- 1 | Wenn ein Problem auftritt, dann immer aus einem bestimmten Grund! Was Sie in einem solchen Fall tun sollten, ist: 2 | 3 | 1. Lesen Sie Ihre Logs; verfolgen Sie sie, um herauszufinden, was der Grund für Ihr Problem ist. 4 | 2. Folgen Sie den Hinweisen in Ihren Logdateien und beginnen Sie mit der Untersuchung. 5 | 3. Starten Sie den gestörten Dienst oder den gesamten Stack neu, um zu sehen, ob das Problem weiterhin besteht. 6 | 4. Lesen Sie die Dokumentation des gestörten Dienstes und suchen Sie in dessen Bugtracker nach Ihrem Problem. 7 | 5. Durchsuchen Sie unsere [Github Issues](https://github.com/mailcow/mailcow-dockerized/issues) nach Ihrem Problem. 8 | 6. Erstelle einen [Github Issue](https://github.com/mailcow/mailcow-dockerized/issues) in unserem GitHub Repository, wenn Sie glauben, dass Ihr Problem ein Fehler oder eine fehlende Funktion ist, die Sie dringend benötigen. Bitte stellen Sie aber sicher, dass Sie **alle Logs** und eine vollständige Beschreibung Ihres Problems mitschicken. Bitte fragen Sie nicht nach Support auf Github. 9 | 7. Treten Sie unserer [Telegram-Community](https://t.me/mailcow) bei oder finden Sie die offiziellen Support-Pakete bei [Servercow](https://servercow.de). Alternativ fragen Sie Twitter um Rat und taggen uns mit **@mailcow_email**. -------------------------------------------------------------------------------- /docs/troubleshooting/debug.en.md: -------------------------------------------------------------------------------- 1 | When a problem occurs, then always for a reason! What you want to do in such a case is: 2 | 3 | 1. Read your logs; follow them to see what the reason for your problem is. 4 | 2. Follow the leads given to you in your logfiles and start investigating. 5 | 3. Restarting the troubled service or the whole stack to see if the problem persists. 6 | 4. Read the documentation of the troubled service and search it's bugtracker for your problem. 7 | 5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) for your problem. 8 | 6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem. Please do not ask for support on Git. 9 | 7. Join our [Telegram community](https://t.me/mailcow) or find the official support packages at [Servercow](https://servercow.de).
Alternatively ask Twitter and tag us with **@mailcow_email** -------------------------------------------------------------------------------- /includes/abbreviations.md: -------------------------------------------------------------------------------- 1 | *[FTS]: Full Text Search 2 | *[OOM]: Out Of Memory -------------------------------------------------------------------------------- /overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block announce %} 4 | {% if config.theme.language == 'de' %} 5 |

Alle Befehle sind gemäß der Syntax des Docker Compose Plugin und der Standalone Variante anwählbar.

6 | {% elif config.theme.language == 'en' %} 7 |

All Commands are available according to the Docker Compose Plugin and the Standalone Version syntax

8 | {% else %} 9 |

All Commands are available according to the Docker Compose Plugin and the Standalone Version syntax

10 | {% endif %} 11 | {% endblock %} -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | mkdocs-material==9.6.14 2 | mkdocs-redirects==1.2.2 3 | mkdocs-glightbox==0.4.0 4 | pygments==2.19.1 5 | mkdocs-static-i18n==1.3.0 6 | mkdocs-git-revision-date-localized-plugin==1.4.7 7 | pillow==11.2.1 8 | cairosvg==2.8.2 9 | --------------------------------------------------------------------------------