8ビットの文字をメールで送信するとき
2010/06/05 | PHPで遭遇した問題とその解決
あまり文字のことで悩みたくないが、中国語のメール送信プログラムを書いたときのメモ。
タイトル等ヘッダに関する部分は英語記述で対応することにした。マルチバイトな文字が関係しなければ悩む必要なし。
中国語だと本文は当然漢字になる。日本語みたいにISO-2022-JPに変換しちゃえばいい、という具合でもなさそう。結局こんな具合で送信することにした。
- 本文($body)はUTF-8とする
- このままだと8bitでメールを送る可能性があるのでimap_8bit関数で変換した。
$body=imap_8bit($body);
ただしimap_8bit関数はIMAPモジュールが必要になる(PHP4以上で使える)。
PHP5.3以上ならquoted_printable_decode関数のほうがいいかも。
メールヘッダも小細工が必要で、以下のヘッダを付与した。
- MIME-Version: 1.0
- Content-Type: text/plain; charset=utf-8
- Content-Transfer-Encoding: quoted-printable
MIME-Versionは必要ないかもしれない。だけど参考にしたメールソフトではついていたので、とりあえずつけておいた。