Email Header Error 550
Jan K.
- php
0 Der Martin
Hallo zusammen,
ich bastele momentan an einer Registrierungsfunktion und möchte dazu gerne E-Mails verschicken.
Dazu folgender Quelltext:
$Name = "Mailbot";
$email = "info@example.com";
$recipient = $_SESSION[mail];
$mail_body = "Danke für Ihre Registrierung.\n Sobald Ihre Angaben überprüft wurden wird Ihr Account freigeschaltet.";
$subject = "Registrierung - example.com";
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$header .= "From: ". $Name . " <" . $email . ">\r\n";
mail($recipient, $subject, $mail_body, $header);
Zu GMX Adressen beispielsweise kann ich meine Mails verschicken, bei Freenet Adressen bekommt mein Mercury Mailserver folgende Fehlermeldung zu Gesicht:
22:06:32: processing job MO004B10
Resolved MX for 'freenet.de' to 195.4.92.9
Connecting to 195.4.92.9
MAIL FROM:xxxxxx@example.org
RCPT TO:xxxxxx@freenet.de
DATA
550 No valid sender in Sender:, Reply-To:, or From:
550 No valid sender in Sender:, Reply-To:, or From:
22:06:33: 1 second elapsed, closing connection.
Der obrige PHP Fetzen ist aus dem PHP Manual zusammengeflickt, den vollen Durchblick was in den E-Mail Header kommt habe ich nicht - deswegen frage ich hier um Rat.
Wie muss mein Header aussehen damit er valide ist, bzw. Freenet nicht rumzickt? UTF-8 würde ich gerne als Codierung weiterverwenden.
Gruß,
Jan
Hallo,
ich bastele momentan an einer Registrierungsfunktion und möchte dazu gerne E-Mails verschicken.
und das tust du von welchem Host aus? Von deinem heimischen Rechner am DSL-Anschluss?
Zu GMX Adressen beispielsweise kann ich meine Mails verschicken, bei Freenet Adressen bekommt mein Mercury Mailserver folgende Fehlermeldung zu Gesicht:
[...]
550 No valid sender in Sender:, Reply-To:, or From:
Das heißt, dass Freenet die angegebene Absenderadresse analysiert, und den dazu gehörenden Host fragt, ob dein DSL-Host autorisiert ist, im Namen des angeblichen Absenders Mails zu verschicken. Das ist er dann wohl nicht.
Wie muss mein Header aussehen damit er valide ist, bzw. Freenet nicht rumzickt? UTF-8 würde ich gerne als Codierung weiterverwenden.
Versende die Mails über den "offiziellen" Mailserver deines Providers, und versuche nicht, sie über einen eigenen SMTP-Server wie Mercury zuzustellen.
So long,
Martin
Das ganze läuft auf einem gemieteten Server.
Mahlzeit Jan K.,
Das ganze läuft auf einem gemieteten Server.
Dann darf wohl der gemietete Server nicht im Namen des Absenders Emails verschicken ... was befindet sich denn in der Variablen $email? Anders gesagt: in wessen Auftrag will der Server denn versenden?
MfG,
EKKi
Hallo zusammen,
danke für die hilfreichen Antworten. Ich habe alles ausprobiert. Angefangen von mb_encode_mimeheader() über eine reine ASCI kodierung.
Da ich mit der Variante mail() scheinbar nicht weiterkomme brauche ich eine alternative möglichkeit mails zu versenden? Welche Möglichkeiten bleiben mir noch?
Gruß,
Jan
Mahlzeit Jan K.,
danke für die hilfreichen Antworten. Ich habe alles ausprobiert. Angefangen von mb_encode_mimeheader() über eine reine ASCI kodierung.
Die Frage hast Du aber leider nicht beantwortet.
Als Hintergrund: heutzutage nimmt nicht mehr jeder Mailserver einfach von jedem irgendwelche Mails für irgendwen entgegen und leitet sie weiter. Insbesondere die Mailserver größerer (Email-)Provider prüfen sehr genau, was dort eingetütet wird.
Wenn jetzt Dein Webserver mit z.B. der IP-Adresse "08.15.47.11" und dem RDNS-Eintrag "web42.foo.example.org" Kontakt z.B. zu Freenet aufnimmt, sich per "HELO mail.example.com" meldet und dann noch Post einwerfen will, die angeblich von GMX kommt ... dann überprüft der Freenet-Mailserver diese Angaben u.U. zuerst. Unter anderem prüft er, ob Dein Server überhaupt im Auftrag von GMX Mails verschicken darf (im Regelfall nicht). Vielleicht überprüft er auch weitere Kopfzeilen der Mail.
In jedem Fall wäre es sinnvoll, diese Vorgang mal genauer zu untersuchen. Ein einfaches "ich hab mal alles mögliche probiert" ist nicht zielführend bei dieser Fehlersuche.
Da ich mit der Variante mail() scheinbar nicht weiterkomme brauche ich eine alternative möglichkeit mails zu versenden? Welche Möglichkeiten bleiben mir noch?
Du könntest eine Socket-Verbindung auf Port 25 aufmachen und die Kommandos alle "von Hand" absetzen ... Spaß beiseite: mail() ist *DIE* Funktion zum Versenden von Mails. Es gibt zwar noch haufenweise Klassen, die ein komfortableres Senden (mit Anhängen, HTML-Mails usw.) ermöglichen - aber wenn mail() nicht klappt, dürften die anderen auch eher nicht funktionieren.
Behebe die Ursache Deines Problems und stochere nicht in den Symptomen herum.
MfG,
EKKi
Moin!
Zu GMX Adressen beispielsweise kann ich meine Mails verschicken, bei Freenet Adressen bekommt mein Mercury Mailserver folgende Fehlermeldung zu Gesicht:
[...]
550 No valid sender in Sender:, Reply-To:, or From:Das heißt, dass Freenet die angegebene Absenderadresse analysiert, und den dazu gehörenden Host fragt, ob dein DSL-Host autorisiert ist, im Namen des angeblichen Absenders Mails zu verschicken. Das ist er dann wohl nicht.
Nein, diese Aussage würde ich als falsch bezeichnen.
Der Mailserver bemängelt einfach, dass er in den angegebenen Headern keine gültige Adressangabe gefunden hat. Da SMTP ein eher fragiles Klartextformat ist, und man jeden möglichen Blödsinn in die einzelnen Textzeilen einer Mail schreiben kann und es dem empfangenden Mailserver obliegt, diesen Freitext zu analysieren und gültige Angaben daraus zu gewinnen, kann man eben Pech haben, wenn die eigene Vorstellung von gültigen Headern nicht mit der Erwartung von Mailservern und vor allem einschlägigen RFCs übereinstimmt.
Häufigster Fehler: Alle Header-Zeilen einer Mail erfordern 7-Bit-ASCII, alles andere ist verboten und muss passend codiert werden. Da manche Mailserver die Direktive "liberal beim Dateneingang, konservativ beim Datenausgang" konsequenter umsetzen, als andere, hat man beim eigenen Fehlverhalten eben manchmal Glück, bzw. es fallen Fehler nicht sofort auf.
Wie muss mein Header aussehen damit er valide ist, bzw. Freenet nicht rumzickt? UTF-8 würde ich gerne als Codierung weiterverwenden.
Headerzeilen haben gemäß RFC2047 codiert zu werden. In PHP wird das von der Funktion mb_encode_mimeheader() erledigt. Man kann es aber auch manuell durch passende Kombination von statischen Strings und base64() hinkriegen. Sieht dann allerdings im Klartext betrachtet nicht mehr sehr lesbar aus, funktioniert aber in allen Mailservern und Mailprogrammen.
- Sven Rautenberg