日本語のメール送信[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