メール文字化け対策

  • 投稿日:
  • by
  • カテゴリ:

このエントリは内容が古いです。
最新の日本語化パッチを使用するか、こちらのエントリを参考にしてください。
日本語化パッチを適用した人は、こちらの文字化け対策を行う必要はありません。

TrackBackとBookmarkletの文字化け対策は、幸いなことに結構な好評を博し、コメントやらトラックバックやらをたくさん頂きました。
ありがとうございます。

さて、MovableTypeには、コメントやトラックバックがあったときにメールでお知らせする機能があるのですが、日本語の事など全く考えていないMovableTypeさん、EUCでそのままメールを送ってきたりします。
ワタシのBeckyでは文字化けして読めなくて悲しい思いをしていたので、文字化け解消ついでにこっちもなおしましょう。

  1. mt.cgiが存在する場所から見て、 ./lib/MT/Mail.pmを開きます。
  2. 最新の2.51だと22行目に以下の4行を加えます。

    require Jcode;
    $body = Jcode->new($body)->jis;
    $hdrs->{Subject} = Jcode->new($hdrs->{Subject})->mime_encode;
    $hdrs->{'Content-Type'} = "text/plain; charset=\"ISO-2022-JP\"";
以上なのです。 今回は、Shift_JISの人もEUC-JPの人もUTF-8の人もみんなJISにしましょう。メールですから。 例によって非常に強引。ただ、この強引さが許されるのがPerlの良いところ。

TrackBack/Bookmarklet/Mailの文字化けを解消したので今のところ不便に思っている部分は解決しました。
あまり手を加えすぎるとバージョンアップの時に大変になっちゃうし。
でも、なんか解決して欲しいという要望があったら気が向いたら調べるかもしれません。


上の記述だけじゃわかりにくいかもなので、前後の行も書いておきます。

@{[ MT->version_slug ]}
SIG
    my $mgr = MT::ConfigMgr->instance;
    my $xfer = $mgr->MailTransfer;

 ↓

@{[ MT->version_slug ]}
SIG
    require Jcode;
    $body = Jcode->new($body)->jis;
    $hdrs->{Subject} = Jcode->new($hdrs->{Subject})->mime_encode;
    $hdrs->{'Content-Type'} = "text/plain; charset=\"ISO-2022-JP\"";

    my $mgr = MT::ConfigMgr->instance;
    my $xfer = $mgr->MailTransfer;