note 27950 added to ref.mail

From: 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

« previous php.notes (#41335) next »