ID:               15841
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Open
 Bug Type:         *Mail Related
 Operating System: Linux
 PHP Version:      4.1.2
 New Comment:

The point is that it is incorrect to send DOS line endings to a Unix
command line program.

Sending a message through qmail (for example) with \r\n line endings
results in extraneous \r's in the delivered email. qmail assumes the
user knows what they're doing and converts only the '\r' characters to
'\r\n'. So if you use '\r\n' it injects '\r\r\n' into the SMTP
conversation.

e.g. 
Headers:
"X-1: test1\nX-2: test2\r\nX-3: test3\r\nX-4: test4:

Message:
Subject: test message
X-1: test1
X-2: test2^M
X-3: test3^M
X-4: test4

I notice that some mail readers sanitize the incoming message and strip
the extra \r's (e.g. Eudora) but Mozilla doesn't and only the first
extra header is displayed as a header while the others appear in the
body of the message.


Previous Comments:
------------------------------------------------------------------------

[2002-03-06 12:28:00] [EMAIL PROTECTED]

i still do not see the point, even for unix/sendmail

even /usr/lib/sendmail will transfer the message
using SMTP, and during this step you will have
\r\n line endings anyway, or am i missing something?

------------------------------------------------------------------------

[2002-03-06 11:04:38] [EMAIL PROTECTED]

The Right Thing(TM), then, is to determine which method (direct or SMTP
injection) is being done. If SMTP, use \r\n. If direct, determine what
the OS' line terminator is (\r\n for Windows, \n for Unix, \r for Mac
(?!)) and use that instead.

------------------------------------------------------------------------

[2002-03-04 05:36:24] [EMAIL PROTECTED]

on windows we *do* talk STMP ...

------------------------------------------------------------------------

[2002-03-03 16:27:44] [EMAIL PROTECTED]

This is causing mail generated by PHP to be BLOCKED as being
potentially a virus by some anti-virus SMTP servers.

The presence of "\r\n" in headers is typically a sign of a virus trying
to reach Outlook. Some antivirus products now totally block MIME mail
containing "\r\n".

This means all mail generated by PHP programs...

------------------------------------------------------------------------

[2002-03-02 20:05:00] [EMAIL PROTECTED]

Last November the mail documentation was changed from saying:
"Multiple extra headers are separated with a newline."
to:
"Multiple extra headers are separated with a carriage return and
newline. Note: You must use \r\n to seperate headers, although some
Unix mail transfer agents may work with just a single newline (\n)."

This change is inaccurate. Line breaks in headers should be the native
line endings for the system on which PHP is running.

The mail() function is not talking to an SMTP server, so RFC2822 does
not apply here. mail() is talking to a command line program on the
local system, and it is reasonable to expect that program to require
system-native line breaks.

Use of CRLF is known to break qmail systems where no conversion of line
breaks occurs on the input data. In this case using CRLF causes all but
the first extra header to appear in the message body (CRLF is
interpreted as two line breaks).

Possibly the best resolution to this problem would be for the mail()
function to convert any line breaks in arg 4 into the system's native
line breaks.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=15841&edit=1

Reply via email to