日本語のメール送信[Pear::Mail]

メモ:  Category:pear

昔々のメールは、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

bluenote by BBB