Ich setze generell meine Webserver bei mir zu Hause im eigenen Netzwerk auf, um sie dann später fertig konfiguriert ins RZ zu schicken. Dabei hatte ich anfangs das Problem, dass ich meine darauf laufenden Mailserver nicht testen konnte, denn ohne festen MX-Eintrag und mit dynamischer IP-Adresse weigert sich mein Mailprovider (GMX), von mir etwas entgegen zu nehmen - schließlich könnte ich ja ein Spammer sein. Aber irgendwie ging’s dann doch. Wie?
(Update: Hier findet sich eine Anleitung für Ubuntu.)
Als Ausgangsbasis hatte ich unter SuSE Linux 9.2/9.3 folgende Konfiguration in der Datei /etc/postfix/main.cf:
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
mail_owner = postfix
default_privs = nobody
unknown_local_recipient_reject_code = 550
mail_spool_directory = /var/mail
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = maildrop
html_directory = /usr/share/doc/packages/postfix/html
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/packages/postfix/samples
readme_directory =
/usr/share/doc/packages/postfix/README_FILES
biff = no
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
relayhost = mail.gmx.net
myhostname = myhost
mydomain = mydomain.de
smtp_helo_name = mydomain.de
virtual_maps = hash:/etc/postfix/virtual
relocated_maps = hash:/etc/postfix/relocated
transport_maps = hash:/etc/postfix/transport
sender_canonical_maps = hash:/etc/postfix/sender_canonical
masquerade_exceptions = root
masquerade_classes = envelope_sender, header_sender,
header_recipient, envelope_recipient
inet_interfaces = 127.0.0.1 192.168.1.50
mydestination = $myhostname, localhost.$mydomain, $mydomain
defer_transports =
disable_dns_lookuos = no
content_filter =
mailbox_command =
mailbox_transport =
smtpd_sender_restrictions = hash:/etc/postfix/access
smtpd_client_restrictions =
smtpd_helo_required = no
smtpd_helo_restrictions =
strict_rfc821_envelopes = no
smtpd_recipient_restrictions = permit_mynetworks,
check_relay_domains
alias_maps = hash:/etc/aliases
myorigin = $myhostname
Weiterhin ist folgender Eintrag in der PHP.ini nötig:
sendmail_path = /usr/sbin/sendmail -t -i -f absendername
Irgendwie muss ich Postfix auch mitteilen, mit welchem Account ich die Mails bei GMX einliefern will, das macht folgender Eintrag in der Datei /etc/postfix/sasl_passwd: mail.gmx.net userid:password
Danach dachte ich, sollte die Postfix-Konfiguration abgeschlossen sein. Zu Testzwecken versuchte ich probehalber, über die Kommandozeile eine Testmail zu versenden. Dazu ruft man /usr/sbin/sendmail EMAILADRESSE auf, gibt ein paar Testzeilen ein und schliesst die letzte Zeile mit einem einfachen ‘.’ (Punkt) ab, damit Sendmail/Postfix weiss, dass die Texteingabe beendet ist, also z.B.
/usr/sbin/sendmail meine_email {at} adresse(.)de
testzeile1
testzeile2
.
Das Resultat war, dass keine Mail ankam. Zur Fehleranalyse betrachtet man sich zuerst einmal das eigene Mail-Postfach, bei der im Falle eines Misserfolges die nicht zugestellte Nachricht mit Fehlermeldung liegt - entweder verwendet man zum Lesen den eMail-Client oder schaut sich das Resultat besser als ASCII-Datei an, die unter /var/spool/mail/ zu finden ist (die Datei, die dem eingeloggten Usernamen entspricht). Oder aber, man liest die letzten Zeilen im Log des Mailservers unter /var/log/mail. Bei der Testmail stand zu lesen:
Final-Recipient: rfc822; meine_email {at} adresse(.)de
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; host mail.gmx.net[213.165.64.20] said: 550 5.1.8 {mp026} Cannot resolve your domain (in reply to MAIL FROM command)
Aha! Ja nun? Also GMX kann meine Domain nicht finden, aber wieso, ich hatte doch in der Datei sasl_passwd meine GMX-Daten gespeichert…?
Wie sich rausstellt liegt es daran, dass GMX sich an der Senderadresse from<=root {at} myhost.mydomain(.)de> stört.
Die Lösung dafür ist mit ein wenig Googeln zu finden: GMX akzeptiert Mails nur, wenn der Absender eine gültige GMX-Adresse ist. Dazu benötigt man eine Datei /etc/postfix/sender/canonical mit folgendem Inhalt:
username@localhost user.name {at} gmx(.)de
absendername@localhost user.name {at} gmx(.)de # wie in PHP.ini
Diese Datei ist mit dem Befehl postmap /etc/postfix/canonical in eine Postfix-Datenbank umzuwandeln. Damit Postfix diese Umwandlung auch übernehmen kann, trägt man das Folgende in die Datei main.cf ein: canonical_maps = hash:/etc/postfix/canonical
Et voilá, in from=... steht nun eine GMX-alike Absenderadresse, die Mail kommt nicht mehr zurück … aber leider auch nicht beim Empfänger an. Oha! Ein Blick in /var/log/mail.info bringt dies zu Tage:
... status=bounced ... Sender address does not belong to logged in user ... This server does not accept an empty envelope from
Ich beginne GMX zu lieben…
Was soll das jetzt wieder, schließlich verwende ich nun einen gültigen User, mit Outlook klappt das ja auch…
Nach langem hin und her und einem Glückstreffer in einem Forumsbeitrag auf linux-club.de mit Verweis auf diesen Text kam ich dann doch noch auf die korrekte Konfiguration. Es lag kurzgefasst daran, dass ich in der Datei canonical eine Konvertierung der lokalen Mailadresse in meinen GMX-Account vornahm, dieser aber nicht mit den Passwortdaten in der Datei sasl_passwd übereinstimmte, da ich dort nicht den Namen, sondern die ID angab - und das wollte GMX partout nicht schlucken.
Zuerst einmal waren nun diese Zeilen in der main.cf anzupassen:
myhostname = mail.mydomain.de
mydomain = mydomain.de
smtp_helo_name = mail.mydomain.de
Danach passe ich dies in der Datei /etc/postfix/canonical an und wandle sie in eine Datenbank um:
root {at} mail.mydomain(.)de meine_email {at} adresse(.)de
postmap /etc/postfix/canonical
Als letzten Schritt schließlich korrigierte ich den Eintrag in /etc/postfix/sasl_passwd und wandelte diese dann in eine Datenbank um:
mail.gmx.net meine_email {at} adresse(.)de:mypassword
postmap /etc/postfix/sasl_passwd
Schön, damit war dann dies Problem auch gemeistert.
Ich hoffe, damit weitergeholfen zu haben.