Mail() Fehler 550-Verification failed

Moin,

ich bin dabei, eine Mail per PHP-Funktion mail() zu versenden. Das mache ich auch nicht zum ersten Mal und das hat bisher immer funktioniert.

Nun bekomme ich aber die Fehlermeldung „Diagnostic-Code: smtp; 550-Verification failed for 550-Unroutable address 550 Server verify failed“.

So wie ich das sehe, wird hier versucht, über einen SMTP-Server die Mail zu versenden. Das Problem ist natürlich, dass es den Benutzer „[email protected]“ nicht gibt, bzw. das keine gültige Mailadresse ist. Als Absender ist in den additional headers von mail() auch eine ganz andere, gültige Mailadresse eingetragen.

Ist es nicht so, dass Mails, die per sendmail versendet werden, der Absender nicht geprüft wird? Kann man also PHP sagen, es soll per sendmail versenden? Oder gibt es eine andere Möglichkeit, dass der Benutzer wwwrun die PHP-Funktion mail() aufruft, die Mail aber unter einem anderen Absender verschickt wird?

Danke für Tipps, vielleicht stehe ich auch nur auf dem Schlauch.

-Efchen

Ich hab jetzt grad mal versucht, das direkt mit sendmail zu versenden.
Die Mail kommt ebenfalls zurück - auch mit „550-Verification failed“.

Aber was ich nicht verstehe - auf dem Rechner läuft bereits eine Web-Applikation, die Mails per sendmail versendet, nur in Perl statt PHP. Und die kommen auch an. Muss ich mich mal durchwühlen, ob ich rauskriege, wo in Perl der Unterschied ist.

Mein Tipp: Statt die mail()-Funktion zu verwenden, solltest du auf eine Mail-Klasse wie z.B. aus dem Zend-Framework zurückgreifen. Ganz klarer Vorteil: Die Mail wird auch dann verschickt, wenn - wie in diesem Fall scheinbar - die Sendmail-Schnittstelle nicht richtig konfiguriert ist oder garnicht erst zur Verfügung steht. Außerdem beinhaltet die Methode über mail() immer das Problem, dass der versendende Rechner die IP des MX-Records aus dem DNS-Protokoll haben sollte, da sonst die Gefahr besteht, dass Mail-Server die eine Abfrage der Sender-IP mit dem MX-Record abgleichen die Mail als Spam markieren könnten. Es ist nämlich nicht immer der Fall, dass beide Sachen auf dem gleichen Server liegen.

Mit einer entsprechenden Klasse kann eien Verbindung zu einem Postfach mittels Benutzername/Kennwort hergestellt werden und über dieses Postfach eine Mail verschickt werden. Ist zwar etwas aufwendiger, da es aber für all das bereits fertige Klassen gibt, hält sich der Mehraufwand in Grenzen. Vorteil ist hierbei, dass die Mail immer vom korrekten Server verschickt wird (als würde mal mit einem konfigurierten Outlook die Mail über den Server schicken) und die oben genannten Nachteile nahezu Geschichte sind.
Eine genaue Anleitung zu entsprechenden Klassen findest du auf den dazugehörigen Doku-Seiten.

Aber eines noch: Je nach Konfiguration kann es sein, dass der Versand von EMails etwas dauert. Ich nutze hierfür eine Schnittstelle mit Datenbank dazwischen: Ich schreibe erst die EMail-Informationen in eine DB und lasse die anstehenden Mails durch einen Cronjob verschicken, der ein mal pro Minute aufgerufen wird. Hier sollte man jedoch sicherstellen, dass der gleiche Cronjob niemals zwei Mal parallel läuft, da es sonst dazu kommen kann - je nachdem, wieviele EMails in der DB stehen - dass EMails mehrfach verschickt werden (weil der eine Cronjob noch dabei ist zu verschicken und der „zweite“ bereits gestartet wurde, zu diesem Zeitpunkt sind die EMails in der Datenbank ja noch nicht als verschickt markiert). Das würde den Nachteil haben, dass der EMail-Server ganz schnell auf internationalen Spam-Listen auftaucht - und ganz nebenbei: Wenn erstmal ein Cronjob neben einem anderen parallel läuft ist es nurnoch eine Frage der Zeit, bis so viele parallele Cronjobs laufen, dass der Server irgendwann den Dienst quittiert. Deshalb bei einer derartigen Realisierung Vorsicht walten lassen.