ID: 22355 User updated by: jotta at mailbox dot hu Reported By: jotta at mailbox dot hu -Status: Feedback +Status: Open Bug Type: Mail related Operating System: Linux 2.2.20 PHP Version: 4.2.3 New Comment:
It wasn't the sendmail binary, because after encountering the problem I've moved to call sendmail directly via popen(), and e-mail sending works this way properly (ofcourse I'm passing the same multiline $subject variable to sendmail through fputs). I've found the part of the code I believe to cause the problem in ext/standard/mail.c (in the source of the latest, 4.3.1 release, though I encountered the bug itself in 4.2.3 first): PHP_FUNCTION(mail) { /* ...cut... */ if (subject_len > 0) { for (; subject_len; subject_len--) { if (!isspace((unsigned char) subject[subject_len - 1])) { break; } subject[subject_len - 1] = '\0'; } for(i = 0; subject[i]; i++) { if (iscntrl((unsigned char) subject[i])) { subject[i] = ' '; } } } /* ...cut... */ The second 'for' cycle must be responsible for replacing all the new line characters to spaces. I think it was used because the developers wanted to avoid the extra leading/trailing linefeeds in the Subject: line (that also leads to send incorrectly formatted (and displayed) e-mails). If you agree, I'd suggest replacing this part of code to another one which is trimming only the leading/trailing control characters - or even a more sophisticated one that would format the subject line to conform to RFC 822, part 3.1.1 "Long header fields", part 3.4.8 "Folding long header fields". [In fact, I'd suggest doing these modifications also to the recipient address (the 'To:' field) for the same reason.] Previous Comments: ------------------------------------------------------------------------ [2003-02-23 21:50:15] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php4-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-STABLE-latest.zip I've tried the code & looked over the source and there is nothing that would 'strip' newlines as you suggest. If they are still being stripped in the new code I would say it is the doing of your sendmail binary. ------------------------------------------------------------------------ [2003-02-21 09:09:22] jotta at mailbox dot hu Before sending an email, first I'm using mb_encode_mimeheader() to prepare the subject (it's very important because of the Central European national characters) $subject = mb_encode_mimeheader( trim($_POST['i_subject']), 'iso-8859-2', 'Q', "\n\t" ); \n\t is used, because e-mail RFCs state, that long lines should look be broken like this: Subject: very long subject etc. etc. and will continue here The problem exactly: mail() function strips the \n characters, this way the e-mails are sent in a non-standard way (even 200+ characters long subject lines), and therefore some servers and/or mail reading softwares fail to transfer/display the email correctly. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=22355&edit=1