0

メール文字化け対処

メールを送信したら相手から「本文が途中から文字化けしている」との連絡。文字コードを読み替えても状態はかわらないとの事。その原因と対処法。

Gmailで改行をいれずに1000バイト以上メールを書いたため、MTAが勝手に改行コードをいれ結果メール本文途中から文字化けが発生した。Outlook等通常のメーラーの場合はメーラーが70-80文字で自動的に改行するので、本文はそのまま改行せずに書くのが通常(改行をいれると、明示的に改行したところと自動折り返しによる改行の二重の改行により、 非常に読みにくい状態になる)。ところがGmailの場合どうやら自動改行がはいらずそのまま送信してしまうらしい。
対処法としては、サーバー側の仕様を以下の通り変更。

/etc/postfix/main.cfに以下を追加し、Postfixを再起動。
smtp_line_length_limit = 0(無制限)

日本語のメール本文は、一般的にISO-2022-JP (いわゆるJISコード) にエンコードして送られる。7bitだけで表現するために、コントロールコード(ESC)とそれに続く文字で目印(エスケープシーケンス)を付け、それ以下に書かれた文字が2バイト(漢字かな等)文字であるか1バイト(半角英数)文字であるか判別する。半角カナは、ISO-2022-JPでは規格に入らなかったのでエンコード出来ない。メールで半角カナが使えないと言われるのはこの為だが、ISO-2022-JPを使わずにBase64等でエンコードして送れば使えないことはない。一方、メールのヘッダ部分にはコントロールコードが使えないので、SubjectやFromに日本語を使っている場合はBase64かQuoted-printableで更にエンコードする必要がある。添付ピアノも同様。これらは、RFC 2045 – MIME (Multipurpose Internet Mail Extensions) の中で定義されている。
実際のスクリプトで表現すると以下のようなかんじ。

一般に、件名の文字化けは、mb_convert_encodingでJIS変換して、mb_encode_mimeheaderでISO-2022-JPエンコード。
$sub=mb_convert_encoding($arrForm[“strName”],”JIS”,”AUTO”);
$sub3 = mb_encode_mimeheader($sub3, “ISO-2022-JP”);

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>