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.
1 |
# apt install postfix |
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.
1 |
# nano /etc/postfix/master.cf |
1 |
#smtp inet n - y - - smtpd |
Danach musste noch 172.22.1.1 als Relay Host hinzu gefügt und das Docker Interface aus inet_interfaces entfernt werden.
1 2 3 |
# postconf -e 'relayhost = 172.22.1.1' # postconf -e "mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128" # postconf -e "inet_interfaces = loopback-only" |
Nach einem Neustart von Postfix konnten nun wieder Systemmails via PHP von WordPress und Co. versendet werden.
1 |
# /etc/init.d/postfix restart |
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/
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.
Beschreibe doch einmal, wie die Server genau aussehen.
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
Ich werde dir da sicher nicht wirklich helfen können.
Du kannst aber alternativ über entsprechende Plugins Mails via SMTP über deinen Server versenden. Das geht bei WordPress z.B. mit: https://wordpress.org/plugins/easy-wp-smtp/
Das lief bei mir zwischenzeitlich recht gut. Falls du das so nicht umsetzen willst oder kannst, versuche eine Lösung über der Support von Servercow zu finden.
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
Ich habe als local MTA auch postfix.
SYMPA Anleitung für postfix installation mit virtual domains:
https://sympa-community.github.io/manual/install/configure-mail-server-postfix.html