日本語のメール送信[Pear::Mail]
昔々のメールは、7ビット分だけを通すネットワークに合わせて仕様が策定されました。 現在のインターネットは、ほぼ8ビットが通りますがメールの基本は7ビットになります。
日本語を扱う文字コードは、 Shift-JIS , EUC , JIS 等いろいろありますが本文には7ビットの JIS(ISO-220-JP) を使います。
ヘッダーは、もう少し面倒で ASCII で書く必要があります。そこで、多くの場合 JIS を Base64 などでエンコードする必要があります。
Mailクラスで使用する場合、headerの日本語は JIS + Base64 などを使用し、本文にはJISに エンコードした文章を指定します。
<?php
require_once "Mail.php";
$recipients = 'bnote@example.com';
$headers['From'] = 'root@example.com';
$subject = 'サブジェクト';
$subject = mb_convert_encoding($subject, 'EUC-JP', mb_detect_encoding($subject));
$headers['Subject'] = mb_encode_mimeheader($subject, 'ISO-2022-JP');
$body = "メッセージ\nです。\n";
$body = mb_convert_encoding($body, 'ISO-2022-JP', mb_detect_encoding($body));
$mail_object =& Mail::factory('mail');
$mail_object->send($recipients, $headers, $body);
?>
TOやFromなどに日本語が含まれると少し面倒ですね。
Subjectが文字化けする場合、日本語のfolding(折り返し)が問題になっているようです。
参考:RFC822,RFC2822