ID: 15841
Comment by: patpro at patpro dot net
Reported By: rha at juggernaut dot com dot au
Status: No Feedback
Bug Type: Mail related
Operating System: Linux
PHP Version: 4.1.2
Assigned To: yohgaki
New Comment:
Hi,
I would really want official PHP Team confirmation for
comments [18 Apr 2:46pm CEST] and [6 Mar 2002 11:04am
CET].
I'm facing the same problem on FreeBSD 5.x, mod_php4
-4.3.6_1,1
If you follow the documentation (using \r\n) mail() will
output badly formated headers. Many SMTPds or Filters
will rewrite headers (sendmail does, Amavisd-new does,
..., but postfix alone doesn't, for example)
I've set up a shell script to pipe mail()'s output into
a file rather than into a SMTP :
$ more /usr/local/sbin/sendmail.cat
#!/bin/sh
cat > /tmp/mailout
then I've set sendmail path to /usr/local/sbin/
sendmail.cat in httpd.conf :
php_admin_value sendmail_path "/usr/local/sbin/
sendmail.cat"
using \r\n as a header separator results in a mix of \n
and \r\n :
$ cat -v /tmp/mailout
To: [EMAIL PROTECTED]
Subject: un dernier test
From: [EMAIL PROTECTED]
Reply-To: [EMAIL PROTECTED]
Content-Type: text/html; charset=iso-8859-1^M
MIME-Version: 1.0^M
Content-Transfer-Encoding: 8bit^M
this mix is not RFC compliant and breaks rendering in
many mail clients.
It would be nice to change the php documentation
accordingly, and even nicer to provide mail() with the
ability to reformat headers.
Previous Comments:
------------------------------------------------------------------------
[2004-04-18 14:46:32] phpbug at labres dot at
Documentation of mail() states:
"Note: You must use \r\n to separate headers, although some Unix mail
transfer agents may work with just a single newline (\n)."
This is WRONG. On Unix systems, any line ending (also between header
fields) has to be \n. On Windows Systems, it has to be \r\n.
Here is part of the sounce code in mail.c (in case of a Unix system):
sendmail = popen(sendmail_cmd, "w");
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
if (headers != NULL) {
fprintf(sendmail, "%s\n", headers);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);
On Windows Systems, the SMTP session is handled within SendText() in
sendmail.c, which sends headers and message as is, so the line endings
have to be \r\n.
Please correct the above cited note and any samples.
There is a further bug in example 4:
| $headers .= "Bcc: [EMAIL PROTECTED]";
remove the ending line break
The header must not end with a line break. As you can see in above code
snipet, the mail implementation adds a \n at the end of the header.
BTW, this is a documentation problem.
------------------------------------------------------------------------
[2002-06-26 01:00:07] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
------------------------------------------------------------------------
[2002-05-25 21:43:58] [EMAIL PROTECTED]
mail() is NOT the all-in-one solution, nor is it really platform
compatible. In fact, win32/mail() is a completely different kind of
story (using native socket interface to talk to sendmail daemon on port
25) then on unix (calling another executeable and exchanging data)
------------------------------------------------------------------------
[2002-05-25 19:33:12] rha at juggernaut dot com dot au
My phpinfo() says:
sendmail_path /usr/bin/sendmail -t -i
I'm running a vanilla qmail installation.
The mail() function works fine... it passes to the MTA whatever data
the user supplies for headers, with whatever line breaks the user
supplied.
The problem is that the line breaks should be unix-style on a Unix
system. But they need to be DOS-style on Windows. This creates a
portability issue for PHP scripts.
See my comment of 6 Mar 2:58pm for an example of the problem when using
DOS-style line breaks on a Unix system.
------------------------------------------------------------------------
[2002-05-25 19:09:15] [EMAIL PROTECTED]
I looked for CRLF in source, but I cannot find CRLF with quick glance
of current CVS source.
It seems mail.c is not converting LF to CRLF.
Are you using qmail-inject or qmail sendmail wrapper?
I don't have any problem with qmail-inject nor qmail's sendmail
wrapper.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/15841
--
Edit this bug report at http://bugs.php.net/?id=15841&edit=1