diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index b1b1a2eb8..a8eab97b8 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -9,12 +9,14 @@ jobs: steps: - name: Checkout πŸ“₯ uses: actions/checkout@v2.3.4 + with: + token: '${{ secrets.GHPAGES_ACTION_CHECKOUT_TOKEN_PAT }}' - name: Install dependencies πŸ„ run: | sudo apt-get -y update sudo apt-get -y install python3-pip - pip install mkdocs-material==7.2.6 pygments==2.10.0 mkdocs-redirects==1.0.3 + pip install mkdocs-material==7.3.2 pygments==2.10.0 mkdocs-redirects==1.0.3 - name: Build site πŸ”§ run: | @@ -23,5 +25,8 @@ jobs: - name: Deploy πŸš€ uses: JamesIves/github-pages-deploy-action@4.1.5 with: + token: '${{ secrets.GHPAGES_ACTION_DEPLOY_TOKEN_PAT }}' + git-config-name: '${{ secrets.GHPAGES_ACTION_DEPLOY_GITNAME_PAT }}' + git-config-email: '${{ secrets.GHPAGES_ACTION_DEPLOY_GITEMAIL_PAT }}' branch: gh-pages # The branch the action should deploy to. folder: site # The folder the action should deploy. diff --git a/README.md b/README.md index 09c0045cd..98edc603f 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,6 @@ https://mailcow.github.io/mailcow-dockerized-docs To build it locally, you need the [Material theme for MkDocs](https://squidfunk.github.io/mkdocs-material/), [MkDocs](https://www.mkdocs.org/) itself and [Pygments](http://pygments.org/). To install these with [pip](https://pip.pypa.io/en/stable/) and get it up and running, fire up your terminal and enter ``` -pip install mkdocs-material==7.2.6 pygments==2.10.0 mkdocs-redirects==1.0.3 +pip install mkdocs-material==7.3.2 pygments==2.10.0 mkdocs-redirects==1.0.3 mkdocs serve ``` diff --git a/docs/debug-common_problems.md b/docs/debug-common_problems.md index dbc5ace30..92686019f 100644 --- a/docs/debug-common_problems.md +++ b/docs/debug-common_problems.md @@ -60,7 +60,7 @@ Docker and iptables-based firewalls sometimes create conflicting rules, so disab If you experience connection problems from home, please check your ISP router's firewall too, some of them block mail traffic on the *SMTP* (587) or *SMTPS* (465) ports. It could also be, that your ISP is blocking the ports for *SUBMISSION* (25). -While Linux users can chose from a variety of tools[^1] to check if a port is open, the Windows user has only the command `telnet host port` available by default (and it has to be activated since Windows Vista). +While Linux users can chose from a variety of tools[^1] to check if a port is open, the Windows user has only the PowerShell command `Test-NetConnection -ComputerName host -Port port` available by default. To enable telnet on a Windows after Vista please check this [guide](https://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx) or enter the following command in an terminal **with administrator privileges**: diff --git a/docs/firststeps-dmarc_reporting.md b/docs/firststeps-dmarc_reporting.md new file mode 100644 index 000000000..aabfdb229 --- /dev/null +++ b/docs/firststeps-dmarc_reporting.md @@ -0,0 +1,121 @@ +DMARC Reporting done via Rspamd DMARC Module. + +Rspamd documentation can be found here: https://rspamd.com/doc/modules/dmarc.html + +**Important:** + +1. Change `example.com`, `mail.example.com` and `Example` to reflect your setup + +2. DMARC reporting requires additional attention, especially over the first few days + +3. All receiving domains hosted on mailcow send from one reporting domain. It is recommended to use the parent domain of your `MAILCOW_HOSTNAME`: + - If your `MAILCOW_HOSTNAME` is `mail.example.com` change the following config to `domain = "example.com";` + - Set `email` equally, e.g. `email = "noreply-dmarc@example.com";` + +4. It is optional but recommended to create an email user `noreply-dmarc` in mailcow to handle bounces. + +## Enable DMARC reporting + +1. Create the file `data/conf/rspamd/local.d/dmarc.conf` and set the following content: + +``` +reporting { + enabled = true; + email = 'noreply-dmarc@example.com'; + domain = 'example.com'; + org_name = 'Example'; + helo = 'rspamd'; + smtp = 'postfix'; + smtp_port = 25; + from_name = 'Example DMARC Report'; + msgid_from = 'rspamd.mail.example.com'; + max_entries = 2k; + keys_expire = 2d; +} +``` + +2. Create or modify `docker-compose.override.yml` in the mailcow-dockerized base directory: + +``` +version: '2.1' + +services: + rspamd-mailcow: + environment: + - MASTER=${MASTER:-y} + labels: + ofelia.enabled: "true" + ofelia.job-exec.rspamd_dmarc_reporting.schedule: "@every 24h" + ofelia.job-exec.rspamd_dmarc_reporting.command: "/bin/bash -c \"[[ $${MASTER} == y ]] && /usr/bin/rspamadm dmarc_report > /var/lib/rspamd/dmarc_reports_last_log 2>&1 || exit 0\"" + ofelia-mailcow: + depends_on: + - rspamd-mailcow +``` + +3. Run `docker-compose up -d` + +## Send a copy reports to yourself + +To receive a hidden copy of reports generated by Rspamd you can set a `bcc_addrs` list in the `reporting` config section of `data/conf/rspamd/local.d/dmarc.conf`: + +``` +reporting { + enabled = true; + email = 'noreply-dmarc@example.com'; + bcc_addrs = ["noreply-dmarc@example.com","parsedmarc@example.com"]; +[...] +``` + +Rspamd will load changes in real time, so you won't need to restart the container at this point. + +This can be useful if you... + +- ...want to check that your DMARC reports are sent correctly and authenticated. +- ...want to analyze your own reports to get statistics, i.e. to use with ParseDMARC or other analytic systems. + +## Troubleshooting + +Check when the report schedule last ran: + +``` +docker-compose exec rspamd-mailcow date -r /var/lib/rspamd/dmarc_reports_last_log +``` + +See the latest report output: + +``` +docker-compose exec rspamd-mailcow cat /var/lib/rspamd/dmarc_reports_last_log +``` + +Manually trigger a DMARC report: + +``` +docker-compose exec rspamd-mailcow rspamadm dmarc_report +``` + +Validate that Rspamd has recorded data in Redis: + +``` +docker-compose exec redis-mailcow redis-cli KEYS 'dmarc;*' +docker-compose exec redis-mailcow redis-cli HGETALL "dmarc;example.com;20211231" +``` + +## Change DMARC reporting frequency + +In the example above reports are sent once every 24 hours. You may want to change that interval: + +1. Edit `docker-compose.override.yml` and a djust `ofelia.job-exec.rspamd_dmarc_reporting.schedule: "@every 24h"` to a desired value. + +2. Run `docker-compose up -d` + +3. Run `docker-compose restart ofelia-mailcow` + +## Disable DMARC Reporting + +To disable reporting: + +1. Set `enabled` to `false` in `data/conf/rspamd/local.d/dmarc.conf` + +2. Revert changes done to `docker-compose.override.yml` + +3. Run `docker-compose up -d` diff --git a/docs/i_u_m_install.md b/docs/i_u_m_install.md index cd9469a30..e53644938 100644 --- a/docs/i_u_m_install.md +++ b/docs/i_u_m_install.md @@ -1,4 +1,4 @@ -You need Docker (a version >= `20.10.2` is required) and Docker Compose. +You need Docker (a version >= `20.10.2` is required) and Docker Compose (a version `<= 2.0` is required). **1\.** Learn how to install [Docker](https://docs.docker.com/install/) and [Docker Compose](https://docs.docker.com/compose/install/). @@ -14,7 +14,7 @@ systemctl enable --now docker - Docker-Compose !!! warning - **mailcow requires the latest version of docker-compose.** It is highly recommended to use the commands below to install `docker-compose`. Package managers (e.g. `apt`, `yum`) **likely won't** give you the latest version. + **mailcow requires the latest version of docker-compose v1.** It is highly recommended to use the commands below to install `docker-compose`. Package managers (e.g. `apt`, `yum`) **likely won't** give you the correct version. _Note: This command downloads docker-compose from the official Docker Github repository and is a safe method. The snippet will determine the latest supported version by mailcow. In almost all cases this is the latest version available (exceptions are broken releases or major changes not yet supported by mailcow)._ ``` diff --git a/docs/third_party-borgmatic.md b/docs/third_party-borgmatic.md index 4d9de3d01..6c98dcae1 100644 --- a/docs/third_party-borgmatic.md +++ b/docs/third_party-borgmatic.md @@ -30,6 +30,7 @@ services: dns: ${IPV4_NETWORK:-172.22.1}.254 volumes: - vmail-vol-1:/mnt/source/vmail:ro + - crypt-vol-1:/mnt/source/crypt:ro - mysql-socket-vol-1:/var/run/mysqld/:z - ./data/conf/borgmatic/etc:/etc/borgmatic.d:Z - ./data/conf/borgmatic/state:/root/.config/borg:Z @@ -244,4 +245,4 @@ To fetch the keyfile run: docker-compose exec borgmatic-mailcow borg key export --paper user@rsync.net:mailcow ``` -Where `user@rsync.net:mailcow` is the URI to your repository. \ No newline at end of file +Where `user@rsync.net:mailcow` is the URI to your repository. diff --git a/docs/third_party-mailman3.md b/docs/third_party-mailman3.md new file mode 100644 index 000000000..f264f2f86 --- /dev/null +++ b/docs/third_party-mailman3.md @@ -0,0 +1,323 @@ +# Installing mailcow and Mailman 3 based on dockerized versions + +!!! info + This guide is a copy from [dockerized-mailcow-mailman](https://github.com/g4rf/dockerized-mailcow-mailman). Please post issues, questions and improvements in the [issue tracker](https://github.com/g4rf/dockerized-mailcow-mailman/issues) there. + +!!! warning + mailcow is not responsible for any data loss, hardware damage or broken keyboards. This guide comes without any warranty. Make backups before starting, 'coze: **No backup no pity!** + +## Introduction + +This guide aims to install and configure [mailcow-dockerized](https://github.com/mailcow/mailcow-dockerized) with [docker-mailman](https://github.com/maxking/docker-mailman) and to provide some useful scripts. An essential condition is, to preserve *mailcow* and *Mailman* in their own installations for independent updates. + +There are some guides and projects on the internet, but they are not up to date and/or incomplete in documentation or configuration. This guide is based on the work of: + +- [mailcow-mailman3-dockerized](https://github.com/Shadowghost/mailcow-mailman3-dockerized) by [Shadowghost](https://github.com/Shadowghost) +- [mailman-mailcow-integration](https://gitbucket.pgollor.de/docker/mailman-mailcow-integration) + +After finishing this guide, [mailcow-dockerized](https://github.com/mailcow/mailcow-dockerized) and [docker-mailman](https://github.com/maxking/docker-mailman) will run and *Apache* as a reverse proxy will serve the web frontends. + +The operating system used is an *Ubuntu 20.04 LTS*. + +## Installation + +This guide is based on different steps: + +1. DNS setup +1. Install *Apache* as a reverse proxy +1. Obtain SSL certificates with *Let's Encrypt* +1. Install *mailcow* with *Mailman* integration +1. Install *Mailman* +1. πŸƒ Run + +### DNS setup + +Most of the configuration is covered by *mailcow*s [DNS setup](https://mailcow.github.io/mailcow-dockerized-docs/prerequisite-dns/). After finishing this setup add another subdomain for *Mailman*, e.g. `lists.example.org` that points to the same server: + +``` +# Name Type Value +lists IN A 1.2.3.4 +lists IN AAAA dead:beef +``` + +### Install *Apache* as a reverse proxy + +Install *Apache*, e.g. with this guide from *Digital Ocean*: [How To Install the Apache Web Server on Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04). + +Activate certain *Apache* modules (as *root* or *sudo*): + +``` +a2enmod rewrite proxy proxy_http headers ssl wsgi proxy_uwsgi http2 +``` + +Maybe you have to install further packages to get these modules. This [PPA](https://launchpad.net/~ondrej/+archive/ubuntu/apache2) by *OndΕ™ej SurΓ½* may help you. + +#### vHost configuration + +Copy the [mailcow.conf](https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailcow.conf) and the [mailman.conf](https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/apache/mailman.conf) in the *Apache* conf folder `sites-available` (e.g. under `/etc/apache2/sites-available`). + +Change in `mailcow.conf`: +- `MAILCOW_HOSTNAME` to your **MAILCOW_HOSTNAME** + +Change in `mailman.conf`: +- `MAILMAN_DOMAIN` to your *Mailman* domain (e.g. `lists.example.org`) + +**Don't activate the configuration, as the ssl certificates and directories are missing yet.** + + +### Obtain SSL certificates with *Let's Encrypt* + +Check if your DNS config is available over the internet and points to the right IP addresses, e.g. with [MXToolBox](https://mxtoolbox.com): + +- https://mxtoolbox.com/SuperTool.aspx?action=a%3aMAILCOW_HOSTNAME +- https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILCOW_HOSTNAME +- https://mxtoolbox.com/SuperTool.aspx?action=a%3aMAILMAN_DOMAIN +- https://mxtoolbox.com/SuperTool.aspx?action=aaaa%3aMAILMAN_DOMAIN + +Install [certbot](https://certbot.eff.org/) (as *root* or *sudo*): + +``` +apt install certbot +``` + +Get the desired certificates (as *root* or *sudo*): + +``` +certbot certonly -d mailcow_HOSTNAME +certbot certonly -d MAILMAN_DOMAIN +``` + +### Install *mailcow* with *Mailman* integration + +#### Install mailcow + +Follow the [mailcow installation](https://mailcow.github.io/mailcow-dockerized-docs/i_u_m_install/). **Omit step 5 and do not pull and up with `docker-compose`!** + +#### Configure mailcow + +This is also **Step 4** in the official *mailcow installation* (`nano mailcow.conf`). So change to your needs and alter the following variables: + +``` +HTTP_PORT=18080 # don't use 8080 as mailman needs it +HTTP_BIND=127.0.0.1 # +HTTPS_PORT=18443 # you may use 8443 +HTTPS_BIND=127.0.0.1 # + +SKIP_LETS_ENCRYPT=y # reverse proxy will do the SSL termination + +SNAT_TO_SOURCE=1.2.3.4 # change this to your IPv4 +SNAT6_TO_SOURCE=dead:beef # change this to your global IPv6 +``` + +#### Add Mailman integration + +Create the file `/opt/mailcow-dockerized/docker-compose.override.yml` (e.g. with `nano`) and add the following lines: + +``` +version: '2.1' + +services: + postfix-mailcow: + volumes: + - /opt/mailman:/opt/mailman + networks: + - docker-mailman_mailman + +networks: + docker-mailman_mailman: + external: true +``` +The additional volume is used by *Mailman* to generate additional config files for *mailcow postfix*. The external network is build and used by *Mailman*. *mailcow* needs it to deliver incoming list mails to *Mailman*. + + +Create the file `/opt/mailcow-dockerized/data/conf/postfix/extra.cf` (e.g. with `nano`) and add the following lines: + +``` +# mailman + +recipient_delimiter = + +unknown_local_recipient_reject_code = 550 +owner_request_special = no + +local_recipient_maps = + regexp:/opt/mailman/core/var/data/postfix_lmtp, + proxy:unix:passwd.byname, + $alias_maps +virtual_mailbox_maps = + proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf, + regexp:/opt/mailman/core/var/data/postfix_lmtp +transport_maps = + pcre:/opt/postfix/conf/custom_transport.pcre, + pcre:/opt/postfix/conf/local_transport, + proxy:mysql:/opt/postfix/conf/sql/mysql_relay_ne.cf, + proxy:mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf, + regexp:/opt/mailman/core/var/data/postfix_lmtp +relay_domains = + proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_relay_domain_maps.cf, + regexp:/opt/mailman/core/var/data/postfix_domains +relay_recipient_maps = + proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf, + regexp:/opt/mailman/core/var/data/postfix_lmtp +``` +As we overwrite *mailcow postfix* configuration here, this step may break your normal mail transports. Check the [original configuration files](https://github.com/mailcow/mailcow-dockerized/tree/master/data/conf/postfix) if anything changed. + +#### SSL certificates + +As we proxying *mailcow*, we need to copy the SSL certificates into the *mailcow* file structure. This task will do the script [renew-ssl.sh](https://github.com/g4rf/dockerized-mailcow-mailman/tree/master/scripts/renew-ssl.sh) for us: + +- Copy the file to `/opt/mailcow-dockerized` +- Change **mailcow_HOSTNAME** to your *mailcow* hostname +- Make it executable (`chmod a+x renew-ssl.sh`) +- **Do not run it yet, as we first need Mailman** + +You have to create a *cronjob*, so that new certificates will be copied. Execute as *root* or *sudo*: + +``` +crontab -e +``` + +To run the script every day at 5am, add: + +``` +0 5 * * * /opt/mailcow-dockerized/renew-ssl.sh +``` + +### Install *Mailman* + +Basicly follow the instructions at [docker-mailman](https://github.com/maxking/docker-mailman). As they are a lot, here is in a nuthshell what to do: + +As *root* or *sudo*: + +``` +cd /opt +mkdir -p mailman/core +mkdir -p mailman/web +git clone https://github.com/maxking/docker-mailman +cd docker-mailman +``` + +#### Configure Mailman + +Create a long key for *Hyperkitty*, e.g. with the linux command `cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo`. Save this key for a moment as HYPERKITTY_KEY. + +Create a long password for the database, e.g. with the linux command `cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo`. Save this password for a moment as DBPASS. + +Create a long key for *Django*, e.g. with the linux command `cat /dev/urandom | tr -dc a-zA-Z0-9 | head -c30; echo`. Save this key for a moment as DJANGO_KEY. + +Create the file `/opt/docker-mailman/docker-compose.override.yaml` and replace `HYPERKITTY_KEY`, `DBPASS` and `DJANGO_KEY` with the generated values: + +``` +version: '2' + +services: + mailman-core: + environment: + - DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb + - HYPERKITTY_API_KEY=HYPERKITTY_KEY + - TZ=Europe/Berlin + - MTA=postfix + restart: always + networks: + - mailman + + mailman-web: + environment: + - DATABASE_URL=postgres://mailman:DBPASS@database/mailmandb + - HYPERKITTY_API_KEY=HYPERKITTY_KEY + - TZ=Europe/Berlin + - SECRET_KEY=DJANGO_KEY + - SERVE_FROM_DOMAIN=MAILMAN_DOMAIN # e.g. lists.example.org + - MAILMAN_ADMIN_USER=admin # the admin user + - MAILMAN_ADMIN_EMAIL=admin@example.org # the admin mail address + - UWSGI_STATIC_MAP=/static=/opt/mailman-web-data/static + restart: always + + database: + environment: + - POSTGRES_PASSWORD=DBPASS + restart: always +``` + +At `mailman-web` fill in correct values for `SERVE_FROM_DOMAIN` (e.g. `lists.example.org`), `MAILMAN_ADMIN_USER` and `MAILMAN_ADMIN_EMAIL`. You need the admin credentials to log into the web interface (*Pistorius*). For setting **the password for the first time** use the *Forgot password* function in the web interface. + +About other configuration options read [Mailman-web](https://github.com/maxking/docker-mailman#mailman-web-1) and [Mailman-core](https://github.com/maxking/docker-mailman#mailman-core-1) documentation. + +#### Configure Mailman core and Mailman web + +Create the file `/opt/mailman/core/mailman-extra.cfg` with the following content. `mailman@example.org` should be pointing to a valid mail box or redirection. + +``` +[mailman] +default_language: de +site_owner: mailman@example.org +``` + +Create the file `/opt/mailman/web/settings_local.py` with the following content. `mailman@example.org` should be pointing to a valid mail box or redirection. + +``` +# locale +LANGUAGE_CODE = 'de-de' + +# disable social authentication +SOCIALACCOUNT_PROVIDERS = {} + +# change it +DEFAULT_FROM_EMAIL = 'mailman@example.org' + +DEBUG = False +``` +You can change `LANGUAGE_CODE` and `SOCIALACCOUNT_PROVIDERS` to your needs. At the moment `SOCIALACCOUNT_PROVIDERS` has no effect, see [issue #2](https://github.com/g4rf/dockerized-mailcow-mailman/issues/2). + + +### πŸƒ Run + +Run (as *root* or *sudo*) + +``` +a2ensite mailcow.conf +a2ensite mailman.conf +systemctl restart apache2 + +cd /opt/docker-mailman +docker-compose pull +docker-compose up -d + +cd /opt/mailcow-dockerized/ +docker-compose pull +./renew-ssl.sh +``` + +**Wait a few minutes!** The containers have to create there databases and config files. This can last up to 1 minute and more. + +## Remarks + +### New lists aren't recognized by postfix instantly + +When you create a new list and try to immediately send an e-mail, *postfix* responses with `User doesn't exist`, because *postfix* won't deliver it to *Mailman* yet. The configuration at `/opt/mailman/core/var/data/postfix_lmtp` is not instantly updated. If you need the list instantly, restart *postifx* manually: + +``` +cd /opt/mailcow-dockerized +docker-compose restart postfix-mailcow +``` + +## Update + +**mailcow** has it's own update script in `/opt/mailcow-dockerized/update.sh', [see the docs](https://mailcow.github.io/mailcow-dockerized-docs/i_u_m_update/). + +For **Mailman** just fetch the newest version from the [github repository](https://github.com/maxking/docker-mailman). + +## Backup + +**mailcow** has an own backup script. [Read the docs](https://mailcow.github.io/mailcow-dockerized-docs/b_n_r_backup/) for further informations. + +**Mailman** won't state backup instructions in the README.md. In the [gitbucket of pgollor](https://gitbucket.pgollor.de/docker/mailman-mailcow-integration/blob/master/mailman-backup.sh) is a script that may be helpful. + +## ToDo + +### install script + +Write a script like in [mailman-mailcow-integration/mailman-install.sh](https://gitbucket.pgollor.de/docker/mailman-mailcow-integration/blob/master/mailman-install.sh) as many of the steps are automatable. + +1. Ask for all the configuration variables and create passwords and keys. +2. Do a (semi-)automatic installation. +3. Have fun! diff --git a/docs/third_party-roundcube.md b/docs/third_party-roundcube.md index 877c4273a..18b4a9695 100644 --- a/docs/third_party-roundcube.md +++ b/docs/third_party-roundcube.md @@ -9,10 +9,17 @@ mv roundcubemail-1.5-rc rc chown -R root: rc/ ``` +If you need spell check features, create a file `data/hooks/phpfpm/aspell.sh` with the following content, then `chmod +x data/hooks/phpfpm/aspell.sh`. This installs a local spell check engine. Note, most modern web browsers have built in spell check, so you may not want/need this. +``` +#!/bin/bash +apk update +apk add aspell-en # or any other language +``` + Create a file `data/web/rc/config/config.inc.php` with the following content. - -**Change the `des_key` parameter to a random value.** It is used to temporarily store your IMAP password. The "db_prefix" is optional but recommended. - + - **Change the `des_key` parameter to a random value.** It is used to temporarily store your IMAP password. + - The `db_prefix` is optional but recommended. + - If you didn't install spell check in the above step, remove `spellcheck_engine` parameter and replace it with `$config['enable_spellcheck'] = false;`. ``` array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true) diff --git a/docs/u_e-mailcow_ui-tagging.md b/docs/u_e-mailcow_ui-tagging.md index f9b3ad3ec..10cd1da96 100644 --- a/docs/u_e-mailcow_ui-tagging.md +++ b/docs/u_e-mailcow_ui-tagging.md @@ -1,6 +1,9 @@ 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. ![mailcow mail tagging settings](images/mailcow-tagging.png) +*Tagging is also known as 'sub-addressing' (RFC 5233) or 'plus addressing'* + + ### Available Actions 1\. Move this message to a sub folder "facebook" (will be created lower case if not existing) diff --git a/mkdocs.yml b/mkdocs.yml index 2faf71486..be439bd91 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,6 +9,8 @@ theme: name: material logo: images/logo.svg favicon: images/favicon.png + features: + - navigation.top markdown_extensions: - codehilite: guess_lang: true @@ -35,6 +37,7 @@ nav: - 'Post Installation Tasks': - 'Advanced SSL': 'firststeps-ssl.md' - 'Disable IPv6': 'firststeps-disable_ipv6.md' + - 'DMARC Reporting': 'firststeps-dmarc_reporting.md' - 'IP bindings': 'firststeps-ip_bindings.md' - 'Local MTA on Docker host': 'firststeps-local_mta.md' - 'Logging': 'firststeps-logging.md' @@ -48,16 +51,16 @@ nav: - 'Sender and receiver model': 'model-sender_rcv.md' - 'General Troubleshooting': - 'Introduction': 'debug.md' - - 'Logs': 'debug-logs.md' + - 'Admin login to SOGo': 'debug-admin_login_sogo.md' + - 'Advanced: Find memory leaks in Rspamd': 'debug-asan_rspamd.md' - 'Attach a Container': 'debug-attach_service.md' - - 'Reset Passwords (incl. SQL)': 'debug-reset_pw.md' + - 'Common Problems': 'debug-common_problems.md' + - 'Logs': 'debug-logs.md' - 'Manual MySQL upgrade': 'debug-mysql_upgrade.md' - 'Recover crashed Aria storage engine': 'debug-mysql_aria.md' - 'Remove Persistent Data': 'debug-rm_volumes.md' - - 'Common Problems': 'debug-common_problems.md' - - 'Admin login to SOGo': 'debug-admin_login_sogo.md' + - 'Reset Passwords (incl. SQL)': 'debug-reset_pw.md' - 'Reset TLS certificates': 'debug-reset_tls.md' - - 'Advanced: Find memory leaks in Rspamd': 'debug-asan_rspamd.md' - 'Backup & Restore': - 'Helper script': - 'Backup': 'b_n_r_backup.md' @@ -69,13 +72,13 @@ nav: - 'Recover accidentally deleted data': 'b_n_r_accidental_deletion.md' - 'Manual/Guides/Examples': - 'mailcow UI': + - 'Blacklist / Whitelist': 'u_e-mailcow_ui-bl_wl.md' - 'Configuration': 'u_e-mailcow_ui-config.md' - 'CSS overrides': 'u_e-mailcow_ui-css.md' - - 'Blacklist / Whitelist': 'u_e-mailcow_ui-bl_wl.md' - 'Pushover': 'u_e-mailcow_ui-pushover.md' - 'Spamfilter': 'u_e-mailcow_ui-spamfilter.md' - - 'Temporary email aliases': 'u_e-mailcow_ui-spamalias.md' - 'Tagging': 'u_e-mailcow_ui-tagging.md' + - 'Temporary email aliases': 'u_e-mailcow_ui-spamalias.md' - 'Two-Factor Authentication': 'u_e-mailcow_ui-tfa.md' - 'WebAuthn / FIDO2': 'u_e-fido2.md' - 'Postfix': @@ -90,9 +93,9 @@ nav: - 'Unbound': - 'Using an external DNS service': 'u_e-unbound-fwd.md' - 'Dovecot': + - 'Customize/Expand dovecot.conf': 'u_e-dovecot-extra_conf.md' - 'Enable "any" ACL settings': 'u_e-dovecot-any_acl.md' - 'Expunge a Users mails': 'u_e-dovecot-expunge.md' - - 'Customize/Expand dovecot.conf': 'u_e-dovecot-extra_conf.md' - 'FTS (Solr)': 'u_e-dovecot-fts.md' - 'IMAP IDLE interval': 'u_e-dovecot-idle_interval.md' - 'Mail crypt': 'u_e-dovecot-mail-crypt.md' @@ -100,9 +103,10 @@ nav: - 'Move Maildir (vmail)': 'u_e-dovecot-vmail-volume.md' - 'Public folders': 'u_e-dovecot-public_folder.md' - 'Static master user': 'u_e-dovecot-static_master.md' + - 'Vacation replies for catchall addresses': 'u_e-dovecot-catchall_vacation.md' - 'Nginx': - - 'Custom sites': 'u_e-nginx.md' - 'Create subdomain webmail.example.org': 'u_e-webmail-site.md' + - 'Custom sites': 'u_e-nginx.md' - 'Redis': 'u_e-redis.md' - 'Rspamd': 'u_e-rspamd.md' - 'SOGo': 'u_e-sogo.md' @@ -130,6 +134,7 @@ nav: - 'Exchange Hybrid Setup': 'third_party-exchange_onprem.md' - 'Gitea': 'third_party-gitea.md' - 'Gogs': 'third_party-gogs.md' + - 'Mailman 3': 'third_party-mailman3.md' - 'Mailpiler Integration': 'third_party-mailpiler_integration.md' - 'Nextcloud': 'third_party-nextcloud.md' - 'Portainer': 'third_party-portainer.md'