Re:
1.) Die hier von Dir gerügten Header haben allesamt nichts mit SMTP zu tun.
wie meinen? Es geht um den Mailversand. Der erfolgt in den allermeisten Fällen über SMTP - also sind auch die dort definierten Regeln zur "Anatomie" einer Mailnachricht anzuwenden.
Na dann will ich mal versuchen etwas ausführlicher zu werden:
Es ist richtig. Es geht um den Versand von mails. Auch richtig ist, daß sie via SMTP versendent werden. Das SMT-Protokoll wird zwischen einem Client und einem Server eingestzt, wobei in den allermeisten Fällen von zwei unterschiedlichen Maschinen ausgegaben werden kann, die durch das Internet miteinander verbunden sind. Der Standard-Mail-Client auf *NIX-Systemen heißt sendmail. Sendmail liest (so jedenfalls beim Beispiel mit der PHP-Funktion mail()) vom stdin
Daten ein. Diese Daten sind durch <CRLF> abgetrennt Message-Header und Message-body (kurz die Gesamtheit der zu versendenden Mail). Dabei werden die Daten aus mit "To:", "Cc:", "Bcc:", "From:" (und ähnliche) beginnenden Zeilen für SMTP aufbereitet.
Message-Header besteht dabei aus einer Reihe von Zeilen, die mit der Transaktion zwischen Client und Server in Angaben und Wortlaut nichts gemein hat. Ich glaube das wird aus RFC 2821 / Seine 75 - Anhang D.3 / "Step 2" am deutlichsten. Die Message-Header subsummieren sich dort zum Content, der auf die Anfrage "DATA" bei Statuscode "354" als Antwort gesendet wird. SMTP kennt die "Befehle" DATA|EHLO|EXPN|HELO|HELP|MAIL|NOOP|RCPT|QUIT|RSET|VRFY "From" und der gleichen ist nicht dabei, wohlaber, wie oben beschrieben, werden sie von der Client-Software zu versenden (insbesondere von Anworten) benötigt.
Es ist richtig. "From:" (und der gleichen) wird durch RFC 822 Abs. 4.4.1 definiert, strenggenommen hat es aber nichts mit den protokollerhelbichen Commands zu tun.
Hinzu kommt auch, daß der von flo angegebene MIME-Header "MIME-Version: 1.0" der RFC 2045 Abs. 4 entspringt.
2.) Sieh Dir bitte mit einem Programm, das aus dem
stdin
liest, an, was beim Ausführen der PHP-Funktion mail() wirklich passiert!Schwierig. Wie? An welcher Stelle? Schließlich baut PHP direkt mit dem im System konfigurierten SMTP-Server eine Socket-Verbindung auf, üblicherweise über Port 25. Wie fange ich diese Datenübertragung ab? Okay, vielleicht mit Ethereal o.ä. Tools. Ich habe aber angenommen, dass der als $message übergebene String direkt an den SMTP-Server weitergereicht wird.
PHP baut meines Wissen auf *NIX keinen Socket zu einem SMTP-Server wärend der Ausführung der Funktion mail() auf. Das macht bestenfalls sendmail; und dann auch eher zu einem entfernten SMTP-Server, der seinerseits an Port 25 auf eingehende Verbindungen wartet, um Mails zu empfangen. Dieses Verhalten ist sicher auf den Gebrauch von PHP auf Windows gemünzt. Da kenne ich mich nicht genug mit aus; weiß aber, daß dort ein SMTP-Server zum versenden von Mails zu konfigurieren ist.
Solltest Du über ein *NIX-System verfügen, dann schreibe Dir ein kleines Programm, das vom stdin
liest und konfiguriere PHP durch sendmail_path so, daß der angegebene Pfad auf das neue Programm zeigt.
So long,
BTW: Schade eigentlich, daß Christoph Zurnieden nicht mehr postet.
Gruß aus Berlin!
eddi
Wer Rechtschreibfehler findet, darf sie behalten.