Tom: Problem mit sendmail und PHP und der Konstanten PHP_EOL

Beitrag lesen

Hello,

Vielen Dank für die Rückmeldung, ich habe es nach dem Trial and Error Prinzip versucht und bin dann doch fündig geworden:

Der Code funktioniert so, wie er hier steht, wenn man

$mime = new Mail_mime;


> durch  
> ~~~php

$mime = new Mail_mime("\n");  

> 

ersetzt.

Erklärung laut PEAR-Manual:
Pear-Manual
siehe unter "Note".

Das ist nur die halbe Wahrheit.
Besser ist es, die Konstante PHP_EOL zu benutzen als Parameter für den Aufruf. Die passt dann wenigstens fast immer.

Zur Erläuterung:
Wenn Mails über das (Linux-)Sendmail-Script versendet werden, erwartet dieses Linux-konforme Zeilenumbrüche (LF) und ersetzt diese dann nach RFC 2822 für den Internet-Mail-Transport durch CRLF. Leider ersetzt das Script sowohl CR als auch LF durch CRLF, sodass es dann durch die Doppelung zu Fehlern führt.

Wenn man Mails über den SMTP-Server (z.B. Port 25) versendet, erwartet dieser bereits eine RFC-2822-konforme Maildatei. Diese _muss_ nun also CRLF für alle Zeilenünbrüche in den Mail-Headern verwenden. Der Versand über Port25 wird auf Windows-Systemen verwendet.

Die Konstante PHP_EOL enthält nun bei Linux-Installationen gerade LF und bei Windows-Installationen CRLF. Bei MAC konnte ich die Sachlage noch nicht überprüfen.

Wenn Du dein Script also sowohl für Linux-, als auch für Windows-Installationen lauffähig halten willst, ohne basteln zu müssen, dann benutzte die Konstante.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de