misterunknown: Mailheader: Zeilenumbruch mit Wagenrücklauf?

Moin,

ich will mit PHP Mails versenden und setze einige Header:

$headers  = "MIME-Version: 1.0\r\n";  
$headers .= "Content-type: text/html; charset=utf-8\r\n";  
$headers .= "X-Priority: 1 (Highest)\r\nImportance: High\r\nX-MSMail-Priority: High\r\n";

Bei mir funktioniert das recht gut. Allerdings findet man im Internet verschiedene Versionen des Zeilenumbruches: mit Wagenrücklauf ("\r\n"), oft aber auch ohne ("\n"). Ich habe in der RFC 5322 bezüglich des Bodys folgendes Statement gefunden:

CR and LF MUST only occur together as CRLF; they MUST NOT appear
  independently in the body.

Also im Body darf kein einfacher LF ("\n") stehen. Wie ist das im Header? Ist es da egal (offensichtlich scheint es auch ohne CR zu funktionieren)? Ist "\r\n" besserer Stil? Scheinbar übersehe ich etwas im RFC...

Grüße Marco

  1. Tach!

    ich will mit PHP Mails versenden und setze einige Header:
    [code lang=php]$headers  = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=utf-8\r\n";

    Das heißt, du sendest HTML-Code. Damit hast du keine Plaintext-Mail und alles was du dazu findest, ist nicht mehr generell relevant - außer für den Plaintext-Teil, wenn du einen solchen mitsendest. Du musst also auch noch beachten, was der Standard zu Multipart und allgemein Mime beschreibt.

    Bei mir funktioniert das recht gut.

    Du bist also ein MUA, MTA und MDA? Interessant.

    Die Aussage ist wertlos, weil du nicht sagst, welche Komponenten da alle zusammenspielen - inklusive den Servern auf dem Weg.

    Also im Body darf kein einfacher LF stehen. Wie ist das im Header? Ist es da egal (offensichtlich scheint es auch ohne CR zu funktionieren)?

    Manche Software ist eben tolerant, andere bringt ein unerwünschtes Ergebnis, wenn sie fehlerhaftes Zeug vorgesetzt bekommt. Und wieder andere machen Fehler selbst bei eingehaltenen Standards.

    Die Frage ist nicht so einfach zu beantworten. Lies dir bitte auch die PHP-Handbuchseite zu mail() durch - egal ob du das verwendest oder nicht, denn da stehen auch Hinweise, wie mit dem Zeilenumbruch zu verfahren ist. Einerseits muss man den Standard als solchen betrachten, andererseits arbeitet man nicht selten ein oder mehrere Schichten über dem Mail-Transport, so dass man nicht auf die Gegebenheiten "da unten" schauen muss, denn das müssen die zwischenliegenden Schichten eigentlich korrekt umsetzen. Wenn das so wäre, wären lediglich die Zeilenumbruch-Gegebenheiten deines Betriebssystems relevant.

    dedlfix.

    1. Moin,

      Bei mir funktioniert das recht gut.
      Du bist also ein MUA, MTA und MDA? Interessant.
      Die Aussage ist wertlos, weil du nicht sagst, welche Komponenten da alle zusammenspielen - inklusive den Servern auf dem Weg.

      Ich habe jede Konstellation getestet mit:
      Server:
         => Apache Webserver mit PHP Version 5.2.17 (webhoster.ag)
         => Strato-Webspace mit PHP 5.3
      Clients:
         => Gmail-Webclient
         => Thunderbird (web.de-Konto)
         => Outlook 2010 (Exchange-Konto in der Firma)

      Die Frage ist nicht so einfach zu beantworten. Lies dir bitte auch die PHP-Handbuchseite zu mail() durch - egal ob du das verwendest oder nicht, denn da stehen auch Hinweise, wie mit dem Zeilenumbruch zu verfahren ist.

      Ok, mach ich.

      Danke dir erstmal.

      Grüße Marco

  2. hi,

    in RFC 5322 steht auch was bezüglich Header-Fields:

    2.2. Header Fields

    Header fields are lines beginning with a field name, followed by a
       colon (":"), followed by a field body, and terminated by CRLF.  A
    ...

    Hotti

    1. Moin,

      Header fields are lines beginning with a field name, followed by a
         colon (":"), followed by a field body, and terminated by CRLF.  A

      Ah, danke. Hatte ich übersehen. Ich hab jetzt CRLF gelassen.

      Grüße Marco