Tom: eMail senden mit mail(), Codierungsprobleme

Beitrag lesen

Hello,

lang ist's her, dass ich selber was dazu verfasst habe und es hat damals zuverlässig funktioniert. Leider ist mein Mail-Modul verschollen. In meinen 1000 Postings hier zum Thema habe ich die Gedanken auch noch nicht alle wiederfinden können.

Jedenfalls habe ich mich jetzt im Dschungel von Zeichencodierung, Transfer-Encoding, Header-Zeilen, was macht der Mailclient "einfach so?" usw. verlaufen.

Stand der Tests ist:

  
  
<?php   mailtest.php ### Versand von Mail mit Attachment ### utf-8 ### ÄÖÜäöü  
  
$filename = __FILE__;  
$content  = chunk_split(base64_encode(file_get_contents($filename)), 76, PHP_EOL);  
#$content = base64_encode(file_get_contents($filename), 76, PHP_EOL);  
  
  
$mailto 	= 'tschmieder@online.de';  
$subject 	= 'Mail-Test (8) ASCII mit ÄÖÜäöü and boundary';  
$message	= 'Hier kommt der öffentliche Text mit dämlichen Übelkeiten und Ödemen';  
$header	    = "from: info@bikers-lodge.com\n";  
$time       = time();  
$boundary   = "----=_TSMail-Next-Part-$time";  
  
$header    .= "Content-Type: multipart/mixed;\n";  
$header    .= "  boundary=\"$boundary\"\n";  
  
$message   .= "\n\n--$boundary\n";  
$message   .= "Content-Type: text/plain;\n";  
$message   .= "  charset=iso-8859-1\n";  
$message   .= "Content-Transfer-Encoding: 8bit\n\n";  
$message   .= "Test-Mail mit Anhang, bitte den Quelltext der Mail kopieren und nachher mitbringen\n\n";  
  
$message   .= "\n--$boundary\n";  
$message   .= "Content-Type: text/plain;\n";  
$message   .= "  name=\"attachment.txt\"\n";  
$message   .= "Content-Transfer-Encoding: base64\n";  
$message   .= "Content-Disposition: attachment;\n";  
$message   .= '  filename="' . basename($filename) . "\"\n\n";  
$message   .= $content . PHP_EOL;  
$message   .= "\n--$boundary--\n";  
  
$sent = mail($mailto, $subject, $message, $header);  
  
  
  
echo "\r\n<pre>\r\n";  
  
echo ($sent)?date('Y-m-d H:i:s') . ": Mail wurde versandt\r\n":"Mail wurde nicht versandt\r\n";  
  
echo "</pre>\r\n";  
  
?>  
  

Das funktioniert auch soweit, wenn der Client ein Thunderbird ist. Andere konnte ich leider nicht testen im Moment.

Wenn ich den vermeintlichen Quelltext der empfangenen Mail dann speichere und ihn anschließend mit notepad++ in der Codierung "utf-8 ohne BOM" anschaue, wird auch alles richtig angezeigt.

Alles, was der User sehen muss, zeigt der Thunderbird auch richtig an.

Wenn ich mir den Quelltext aber nun anzeigen lassen mit "Thunderbird/Quelltext anzeigen", dann bekomme ich schon wieder Bauchschmerzen:

Received: by h2222671.stratoserver.net (Postfix, from userid 33)
id C4D8B6CA097; Tue,  4 Mar 2014 14:10:03 +0100 (CET)
To: tschmieder@online.de
Subject: Mail-Test (8) ASCII mit ÄÖÜäöü and boundary
X-PHP-Originating-Script: 0:mailtest.php
from: info@bikers-lodge.com
Content-Type: multipart/mixed;
  boundary="----=_TSMail-Next-Part-1393938603"
Message-Id: 20140304131003.C4D8B6CA097@h2222671.stratoserver.net
Date: Tue,  4 Mar 2014 14:10:03 +0100 (CET)
Envelope-To: tschmieder@online.de
X-UI-Filterresults: notjunk:1;V01:K0:6ZHqduRylEA=:kdADYP2ysE4jZDDDsngeb5qM19
 higEP6GOVerbd3h59qnGdV5T75uNyUQvTAx5E866TZXIRtUg5ESlP7OUA5VDrQe+O0Kf5Y7DV
 mPU66X7FAN26W787qvhhsVmiGiln8zcnOaHY6i/tualP3aVxOkPinUDWOGY5DvjDduPMRYZkX
 aGgtFziOmbU044aL31xsjJxY8VSCH2tQOaLpRVqwla5g4pbCRhzkAtYOMjOdrTxDuoBgoDmYs
 Zz8hoAOIwoZFino4BuUuVekmtd1ZuI5Ch16hCRbuGYJESK5oSwhazIfzswjjJe75sPgDknz9x
 6QiAH5q9V8lDY8n/ygddW9be5kdK4nsq0x/AzB36S3B/1ZGVKnsOs5vcddTOlVUp6OfLsv3OV
 PZyjTnAzClasZagcVsREKfm6OR59G3cyWzcZ4BT1UGI9mInoebVDJEdBpJ6pZuBzddEEZlDwP
 wzBBpfmyQl8NPt4nXgWNBGtJaR7H5Bi3ix/cS4VflC9XdtBrzswray21ahQiunMQyNwpiN1AC
 Il16YMmc6sbiHYJa5EfUWZ82+DpUhBP/2mQV5mi+T8v/W+oKh6Vsx+Vt4lVYWjGL2L1GRk3FW
 IR/mWaHsduJhTpa0n0/4elb9z4e4XoZRA5TxNLjFD5W7FGB+zkSLarAgi14JKpf3Vh//ydCHp
 CoS1PGyg6V0TCLdbdel6Ec16P8TKTjMwAoLdf1alXtyI5S1lWAXumDmTHudSHNWfgzdi0eeeP
 Bdm15PgitVaYLeLnBel6+yvaE/aLmcX3nk5aJgHpitf4/T5tTYkwBOtBDUy5iEUA3BB8o68+d
 DTNGEGXua1Li8ojJ3QyKuCYGMk8XzMBrPHiaOkwCQW0lJ9kdjT8a4PCOF0AQxYxcsu4tDmHgf
 d64k9HJhgZPK/oN9ZLWiqw07ZUZ5gFdnykx4CM+VsxYwGeVsiZgExyo+fhHRvUdwijATBMRK3
 AoxDKsrdzxWk7qkNZwEBtNDd4j+mY4ysCMxkNBqDxP3oFMyx2pkwRL24ZFxCvomKU6tmtM7VS
 0YN81MHO0fp/KHRc65zDTAA/Iplbu2YjX/DyXUoh8chJtrfu1wo4X1UlPnUC/OBZOS/Ofj3mk
 M4Z0Y3bTmR6EBzYpOXp96abcknYuMjQn+OHosRxdivlqZrwzejeHCZ6IAo5YiEk0lcf5rnyVz
 BK+S8jTXi6KIW2ltXjGDXofhOuJ2x1dv/B5gCBrUD6MGFRV5aW78hST1vyvHyN61ETUdlumpm
 gELn96zooaruMBGPHn7yl1ajFDP/YzUFCzQ9/Dw5LtxEdhj4c2DHZ7e0=
Old-X-EsetId: 8DD79423D8FC0F37DC92C5
Old-X-EsetId: 8DD79423D8FC0F37DC92C5
Old-X-EsetId: 8DD79423D8FC0F37DC92C5
X-EsetId: 8DD79423D8FC0F37DC92C5

Hier kommt der öffentliche Text mit dämlichen Übelkeiten und Ödemen

------=_TSMail-Next-Part-1393938603
Content-Type: text/plain;
  charset=iso-8859-1
Content-Transfer-Encoding: quoted-printable

Das ist die Ansicht in iso-8859-1-Codierung. Die wäre aber für Mails eigentlich naheliegender, als utf-8, da mMn mailheader immer noch ausschließlich ASCII enthalten dürfen... Oder?

Und woher hat der Mail-Server "Content-Transfer-Encoding: quoted-printable". Hab ich nirgends so angegeben. Ganz im Gegenteil, ich schrieb

Content-Transfer-Encoding: 8bit\n\n";

Das hatte ich mir aus einer alten Testmail von OE so rausgepult.

Ich habe einfach im Moment den Überblick (und das Gedächtnis dafür) verloren, wer an welcher Stelle was verkurbelt, was ich nicht sofort sehe. Da ich keinen näheren Zugriff auf die Mailserver habe (weder Sender, noch Empfänger), kann ich leider auch nicht generisch (mit HEX-Editor) ind die gehandetlen Files reinschauen...

Wer bringt mich mal wieder auf die Spur?

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bikers-lodge.com