PHPのメール送信における日本語コードの扱いについて質問があります。


前回の質問で、
携帯・PCともに、メール本文は「sjis-win+Base64」か「UTF-8+Base64」であれば、文字化けなくメールを送信できることが整理できました。

問題はメールヘッダで、一部の機種(昔のAU機)ではUTF-8が文字化けするとの情報があります。
いまのところ、機種依存しない処理としたいため、
メールヘッダとメール本文のエンコード処理を「sjis-win+Base64」で検討しているのですが、この場合、機種に依存する問題があるかどうかわかりません。

質問は、メールヘッダを「sjis-win+base64」でエンコードしたものを、携帯やPCにメール送信する際に制限事項があればご教授をお願いいたします。

携帯メールは、Docomo(FOMA), AU, Softbank(3G)の標準メーラー
PCメールは、WindowsのOutlook, Becky, Thanderbardを想定しています(Macは非対象です)

メールヘッダに関しては統一見解が書かれた文献が見当たらないため、よろしくお願いいたします。
抽象的な質問で申し訳ありませんが、よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2010/01/12 00:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:horonict No.2

回答回数257ベストアンサー獲得回数51

ポイント35pt

前回も回答しましたが、電子メールの Subject は、ISO-2022-JP(いわゆるJISコード)をBase64エンコードするのが標準方式です。

http://ja.wikipedia.org/wiki/ISO-2022-JP


ご質問に挙げられているメーラーであれば、SJISやUTF-8をBase64でエンコードしても化けないと思いますが、Mac/Linuxのメーラーだと化ける場合があります。


また、ISO-2022-JPで定義されていない丸付数字や半角カタカナは、そもそも電子メールで送ること自体がマナー違反だと考えてください。

これらの文字は、国産メーラーであれば化けないことが多いのですが、相手がどんなメーラーを使っているか分からない状況では化ける可能性があるためです。

id:cochoo

いつもお世話になっております。

電子メールの基本はRFC勧告通り、ISO-2022-JPで行うのが通例であると認識しております。

ただし、JIS X 0201の半角カナは問題外としても、

JIS X 0208のNEC特殊文字(①②③など)を使いたいユーザがいるので、そうも言ってられない事情があったのです。

でも、ヘッダ(subject)に特殊文字を使うのは確かにどうかと思いますので、

おっしゃる通り、いまのところヘッダだけはISO-2022-JPにしようと考えております。

ありがとうございました。

2010/01/05 22:34:14

その他の回答1件)

id:pah00 No.1

回答回数208ベストアンサー獲得回数5

ポイント35pt

>「sjis-win+Base64」

携帯はこれで問題なし

PCの場合は、Windows95時代のメーラーの一部は文字化けする。

http://q.hatena.ne.jp/answer

id:cochoo

ご回答ありがとうございます。

携帯とPCを共通のエンコードで処理するのは無理があるように思っていたのですが、

一応これでやってみようと思います!ありがとうございました。

2010/01/05 22:28:34
id:horonict No.2

回答回数257ベストアンサー獲得回数51ここでベストアンサー

ポイント35pt

前回も回答しましたが、電子メールの Subject は、ISO-2022-JP(いわゆるJISコード)をBase64エンコードするのが標準方式です。

http://ja.wikipedia.org/wiki/ISO-2022-JP


ご質問に挙げられているメーラーであれば、SJISやUTF-8をBase64でエンコードしても化けないと思いますが、Mac/Linuxのメーラーだと化ける場合があります。


また、ISO-2022-JPで定義されていない丸付数字や半角カタカナは、そもそも電子メールで送ること自体がマナー違反だと考えてください。

これらの文字は、国産メーラーであれば化けないことが多いのですが、相手がどんなメーラーを使っているか分からない状況では化ける可能性があるためです。

id:cochoo

いつもお世話になっております。

電子メールの基本はRFC勧告通り、ISO-2022-JPで行うのが通例であると認識しております。

ただし、JIS X 0201の半角カナは問題外としても、

JIS X 0208のNEC特殊文字(①②③など)を使いたいユーザがいるので、そうも言ってられない事情があったのです。

でも、ヘッダ(subject)に特殊文字を使うのは確かにどうかと思いますので、

おっしゃる通り、いまのところヘッダだけはISO-2022-JPにしようと考えております。

ありがとうございました。

2010/01/05 22:34:14
  • id:cochoo
    追加で質問してもよろしいでしょうか?
    sendmailでヘッダをISO-2022-JP、本文をBase64にする場合、MIMEをどのように設定すればよいのでしょうか?

    $send_subject = mb_convert_encoding($subject, 'ISO-2022-JP', 'sjis-win');
    $send_body = base64_encode($body);
    $headers['MIME-Version'] = '1.0';
    $headers['Content-Type'] = 'text/plain; charset=Shift_JIS';
    $headers['Content-Transfer-Encoding'] = 'base64';
    $mail = Mail::factory('sendmail');
    $result = $mail->send($recipients, $headers, $send_body);

    上記をbeckeyで試したところ文字化けせず、Thanderbardで試すと文字化けしました。
    やはり統一しなければいけないのでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません