#23192 [Opn]: mb_encode_mimeheader mangles long lines?
| From: | jc at mega-bucks dot co dot jp | Date: | Thu, 17 Apr 2003 01:14:04 +0000 |
| Subject: | #23192 [Opn]: mb_encode_mimeheader mangles long lines? | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-37784@lists.php.net to get a copy of this message | ||
ID: 23192
User updated by: jc at mega-bucks dot co dot jp
Reported By: jc at mega-bucks dot co dot jp
Status: Open
Bug Type: mbstring related
Operating System: Red Hat Linux 8.0
PHP Version: 4.3.2RC1
New Comment:
Oh, and you said:
>Although mb_send_mail() seems to resolve your problem
How does mb_send_mail() seem to solve my problem? I cannot find
anything in mb_send_mail() documentation that says it will act
differently than mb_encode_mimeheader(). But it does solve the problem
I will certainly use it :)
Previous Comments:
------------------------------------------------------------------------
[2003-04-16 19:51:33] jc at mega-bucks dot co dot jp
>Please double-check the documentation
Ok,
#1 I can't find anywhere in the docs that say that
mb_encode_mimeheader() follows RFC2047.
#2 Just becuase it follows RFC2047 doesn't say anything about how
mb_encode_mimeheader() treats lines that are too long. Nowhere in the
documentation does it say that mb_encode_mimeheader() truncates lines
...
#3 Since the documentation doesn't say anything I had assumed that
mb_encode_mimeheader() would trim correctly convert strings that are
too long into "CRLF space" encoded words. Is this right? If so it
should be added to the documentation
#4 It seems that mb_encode_mimeheader() *did* correctly detect that my
headers line was too long and did split the header properly. *However*
the subject was garbled when my mail reader put it back together. I am
assuming this is because the string is double-byte and
mb_encode_mimeheader() cut the string *inside* a double-byte. If this
is the case then I would consider *that* a bug.
I'm not conversant in double-byte characters ... Did
mb_encode_mimeheader() incorrectly cut the string inside a double-byte
character?
------------------------------------------------------------------------
[2003-04-16 15:50:13] moriyoshi@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
Although mb_send_mail() seems to resolve your problem, the behaviour is
quite by design.
mb_encode_mimeheader is implemented in accordance with section 2
("Syntax of encoded-words") of
RFC2047(http://www.ietf.org/rfc/rfc2047.txt).
---------------------------------------------------------
An 'encoded-word' may not be more than 75 characters long, including
'charset', 'encoding', 'encoded-text', and delimiters. If it is
desirable to encode more text than will fit in an 'encoded-word' of 75
characters, multiple 'encoded-word's (separated by CRLF SPACE) may be
used.
While there is no limit to the length of a multiple-line header
field, each line of a header field that contains one or more
'encoded-word's is limited to 76 characters.
--------------------------------------------------------- EOQ
------------------------------------------------------------------------
[2003-04-13 22:09:21] jc at mega-bucks dot co dot jp
Update: The subject is properly encoded *if* I truncate it to be:
$subject =
"【tokyo-avland】公的証明書の送";
This gives the following subject header:
Subject:
=?ISO-2022-JP?B?GyRCIVobKEJ0b2t5by1hdmxhbmQbJEIhWzh4RSo+WkxAPXEkTkF3GyhC?=
------------------------------------------------------------------------
[2003-04-13 21:59:01] jc at mega-bucks dot co dot jp
I am using mb_encode_mimeheader() and it seems that the function does
not work properly on long subject lines ...
$headers = "MIME-Version: 1.0\n" ;
$headers .= "From: $from <$from_email>\r\n";
$headers .= "Reply-To: $from <$from_email>\r\n";
$headers .= "Content-Type: text/plain;charset=ISO-2022-JP\n";
$body = mb_convert_encoding($body, "ISO-2022-JP","AUTO");
$subject =
"【tokyo-avland】公的証明書の送付期限のお知らせ";
/*
If I cut the subject to be
$subject =
"【tokyo-avland】公的証明書の送付";
There is no problem. Problems occur if I I put characters
after this ... This doens't work either:
$subject =
"【tokyo-avland】公的証明書の送付";
$subject .=
"期限のお知らせ";
*/
mb_language("ja");
$subject = mb_convert_encoding($subject, "ISO-2022-JP","AUTO");
$subject = mb_encode_mimeheader($subject);
mail($to, $subject, $body, $headers, $sendmail_params);
The mail I receive has the following subject line:
Subject:
=?ISO-2022-JP?B?GyRCIVobKEJ0b2t5by1hdmxhbmQbJEIhWzh4RSo+WkxAPXEkTkF3SVU0?=
=?ISO-2022-JP?B?fDhCJE4kKkNOJGkkOxsoQg==?=
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=23192&edit=1