Mail Relay für Mailcow Dockerized

6
11302
JuralMin / Pixabay

Nachdem auf meinem neuen vServer ein Webserver und ein Mailserver installiert und eingerichtet waren, tauchte ein neues Problem auf. Meine Webseiten und meine Nextcloud konnten via PHP keine Mails mehr absetzen. Die Ursache hierfür liegt auch dieses Mal in der Konstellation meines Servers mit der installierten Container-Lösung Mailcow Dockerized, wo Postfix im Container seinen Dienst verrichtet und von dem Apache so nicht angesprochen werden konnte.

Was kann man tun?

Am einfachsten ist es in WordPress, Joomla! und der Nextcloud den Mailversand via SMTP einzurichten. Genau das hatte ich auch zur schnellen Lösung umgesetzt. Leider funktionierte das Ganze nicht wirklich mit Elgg.

Wie löst man das Problem zufriedenstellend?

Ganz einfach, indem man ein Mail Relay einbaut. Dazu wird ein lokaler MTA für den Docker Host eingerichtet. Das klingt aber alles komplizierter als es tatsächlich ist.

Dazu habe ich Postfix installiert.

Postfix Configuration

Postfix Configuration
Postfix Configuration
Postfix Configuration

Während der Installation wird man nach dem System mail name gefragt. Hier wurde der Hostname des Servers (intux) eingetragen.

Vorsicht: Nicht die Domain eingeben!

Nach Abschluss der Installation, musste noch die /etc/postfix/master.cf geändert werden. Dazu wurde der SMTP Listener mit # auskommentiert.

Danach musste noch 172.22.1.1 als Relay Host hinzu gefügt und das Docker Interface aus inet_interfaces entfernt werden.

Nach einem Neustart von Postfix konnten nun wieder Systemmails via PHP von WordPress und Co. versendet werden.

Alle Änderungen werden übrigens in die /etc/postfix/main.cf geschrieben. Nur falls bei der Installation von Postfix mal etwas schief geht. 😉

Weiterführende Infos und Anleitungen findet man auf der Projektseite von Mailcow-Dockerized unter: https://mailcow.github.io/mailcow-dockerized-docs/

6 Kommentare

  1. Vielen Dank für das Tutorial wie man den PHP Mailversand eines Webservers mittels Mailcow umsetzten kann. Leider funktioniert es die Lösung bei mir nicht. Könnte das daran liegen, dass Webserver und Mailcow auf einem vServer laufen müssen?
    Ich betreibe Webserver und Mailserver getrennt um im Fall des Falles 2 unabhängige Systeme zu haben.
    Auch nach sämtlichen Änderungen wie im Tutorial beschrieben kann ich Mailcow mittels PHP vom Webserver nicht ansprechen.

  2. Mailserver und Webserver laufen beide auf Debian 8 64x. Mailcow findet sich am neuesten Stand und wurde gemäß offizieller Anleitung installiert – funktioniert auch ohne Probleme. Der Versand & Empfang von Emails mittels Outlook etc geht einwandfrei. Am Webserver wurde das Vesta Control Panel installiert. Vesta bietet die Basis für sämtliche Websiten und stellt alles Notwendige wie PHP & MySQL zur verfügung. Darauf wird WordPress und OpenCart betrieben. Fubnktioniert ebenfalls einwandfrei. Nun sollte der Versand von Emails (Newsletter etc) direkt aus diesen Seiten mittels SMTP über Mailcow erfolgen um die entsprechende Zustellbarkeit zu gewährleisten. Als Test, dass meine Seiten Emails versenden können, habe ich den Versand erfolgreich mittels MAILGUN (einem Massen-Email-Service) erprobt. Ich möchte jedoch auf solche Services verzichten und den Versand über meinen Mailserver abwickeln. Das wiederum scheint nicht zu funktionieren. Es scheitert am Mail Relay – das bekomme ich nicht zum Laufen, was wohl an der Postfix Konfiguration liegen wird. Hostname des Mailservers ist treffend „Mail-Server“, den Rest habe ich 1:1 wie in der Anleitung beschrieben nach dem copy-paste Prinzip umgesetzt. Irgendwas scheint nicht zu stimmen, jedoch wüsste ich nicht, wo ich den Fehler suchen sollte.

    Meine main.cf sieht aktuell wie folgt aus:

    # See /usr/share/postfix/main.cf.dist for a commented, more complete version

    # Debian specific: Specifying a file name will cause the first
    # line of that file to be used as the name. The Debian default
    # is /etc/mailname.
    #myorigin = /etc/mailname

    smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
    biff = no

    # appending .domain is the MUA’s job.
    append_dot_mydomain = no

    # Uncomment the next line to generate „delayed mail“ warnings
    #delay_warning_time = 4h

    readme_directory = no

    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.

    smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
    myhostname = local.my.fqdn.tld
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    mydestination = Mail-Server, Mail-Server, localhost.localdomain, localhost
    relayhost = 172.22.1.1
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_command = procmail -a „$EXTENSION“
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = loopback-only
    relay_transport = relay
    default_transport = smtp

  3. Danke für den Artikel.

    Outgoing ist für mich auch kein Problem damit.

    Die gute Frage ist, wie leite ich Ingoing Mails auf den Local MTA um. Ich habe den Mailinglistserver sympa installiert auf subdomains a la lists.domain.com

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein