昔々のメールは、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
Copyright 1997-2010 BBB All rights reserved.