note 27950 added to ref.mail
| From: | gordon at kanazawa-gu dot ac dot jp | Date: | Fri, 27 Dec 2002 06:29:10 +0000 |
| Subject: | note 27950 added to ref.mail | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-41335@lists.php.net to get a copy of this message | ||
PROBLEM:
non-ascii (e.g. Japanese, Korean) characters appear garbled in email subject/name headers BUT the
php server is not enabled to use multi-byte functions (mb_send_mail etc.)
SOLUTION:
encode the non-ascii charaters using
"=?$charset?B?".chunk_split(base64_encode($non_ascii_chars))."?="
EXAMPLE:
$charset = "iso-2202-jp"; // Japanese charater set
// encode names, as necessary
$to_name = encode("to's name in Japanese", $charset);
$cc_name = encode("cc's name in Japanese", $charset);
$bcc_name = encode("bcc's name in Japanese", $charset);
$from_name = encode("from's name in Japanese", $charset);
// create pretty email addresses, if possible
$to_email = create_email_address($to_name, "to@somewhere.com");
$cc_email = create_email_address($cc_name, "cc@somewhere.com");
$bcc_email = create_email_address($bcc_name, "bcc@somewhere.com");
$from_email = create_email_address($from_name, "from@somewhere.com");
// create headers
$headers = "";
$headers .= create_email_header("Cc", $cc_email);
$headers .= create_email_header("Bcc", $bcc_email);
$headers .= create_email_header("From", $from_email);
$headers .= create_email_header("Reply-to", $from_email);
$message = "message in Japanese";
$subject = "subject in Japanese";
// send the email message with encoded subject and names
mail($to_email, encode($subject, $charset), $message, $headers);
function encode($str, $charset) {
return ($str && $charset) ? "=?$charset?B?" . chunk_split(base64_encode($str)) .
"?=" : $str;
//
// for more details on Message Header
// Extensions for Non-ASCII Text see ...
// http://www.csl.sony.co.jp/cgi-bin/hyperrfc?RFC1522
// linked to from: http://openlab.ring.gr.jp/Jcode/
}
function create_email_header($name, $value) {
return ($name && $value) ? "$name: $value\r\n" : "";
}
function create_email_address($name, $email) {
return ($name) ? "$name <$email>" : "$email";
}
--
http://www.php.net/manual/en/ref.mail.php
http://master.php.net/manage/user-notes.php?action=edit+27950
http://master.php.net/manage/user-notes.php?action=delete+27950
http://master.php.net/manage/user-notes.php?action=reject+27950