このエントリは内容が古いです。
最新の日本語化パッチを使用するか、こちらのエントリを参考にしてください。
日本語化パッチを適用した人は、こちらの文字化け対策を行う必要はありません。
TrackBackとBookmarkletの文字化け対策は、幸いなことに結構な好評を博し、コメントやらトラックバックやらをたくさん頂きました。
ありがとうございます。
さて、MovableTypeには、コメントやトラックバックがあったときにメールでお知らせする機能があるのですが、日本語の事など全く考えていないMovableTypeさん、EUCでそのままメールを送ってきたりします。
ワタシのBeckyでは文字化けして読めなくて悲しい思いをしていたので、文字化け解消ついでにこっちもなおしましょう。
- mt.cgiが存在する場所から見て、
./lib/MT/Mail.pmを開きます。
- 最新の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;
Akihiro
わぁ、Bookmarklet に続いてメールまで。素晴らしすぎます milano さま。私も同様に設定し、もし何か不具合があればご報告します。
Akihiro
UTF-8 で設定した Movable Type でも、コメントがついたときに日本語(JIS)のメールが送られてくることを確認しましたので、お知らせします。感謝。
hirata
すばらしく早いですね。うちでも確認中ですが、うまくいっているようです。Content-type が iso-8859-1 になっておくられてくるので、
$hdrs->{'Content-type'} = "text/plain; charset=\"ISO-2022-JP\"";
も追加したほうがいいでしょうかね。
milano
> hirataさん
おっしゃるとおりですね。
Beckyでバケないから忘れてました。
修正しておきました。
kengo
最初のコードでも先ほど送られてきたTrackbackの文字化けは解消していましたが、一応追加のコードも入れてみました。
メーラーはNetscape mail(Netscape7.0についているもの)
です。
Almailでは最初からタイトル部分は化けてはいませんでした。
今のところうまくいっています。
ノネコ
わたしの使用環境は、MT2.64をロリポップのへインストールして使っています。上記の通知メールの文字化けに悩んでいてこのページを教えてもらいました。早速、ご指摘のコードを見たのですが、
require Jcode;
$body = Jcode->new($body)->jis;
$hdrs->{Subject} = Jcode->new($hdrs->{Subject})->mime_encode;
$hdrs->{'Content-Type'} = qq(text/plain; charset="iso-2022-jp");
$hdrs->{'Content-Transfer-Encoding'} = "7bit";
というようにJISをすでに指定されているのですが、受信メールでは概要などが文字化けしています。
解決方法はないでしょうか?
よろしくお願いいたします。
milano
>ノネコさん
「文字化けしています」とだけ言われても、こちらでは思い当たることは無いですねぇ。
ノネコ
milanoさん、説明不足で申しわけありませんでした。
「コメントやトラックバックがあったときにメールでお知らせする機能」への文字化けは解消しているのですが、「Notification」にメールアドレスを登録して、「エントリーを編集する」の下のほうにある「通知の送信」で概要などを一緒に送るときに文字化けがおこってしまいます。
これへの対応策がありましたらご教授ください。
Hussy
はじめまして。トルコ語と日本語が同居したサイトを作りたくてMovable Typeを使い出しました。UTF-8で構成したのでサイトの方はほぼ問題なく両言語とも使用できているのですが、コメントがついた際の通知メールが文字化けしてしまって困っています。Content-TypeでJISに指定しているからなのか、Jcodeを通しているからどちらにしてもだめなのか、、UTF-8で送るようにする場合の改造ポイントなど教えていただけると幸いです。
milano
UTF-8で送るようにするには、ワタシの提示している修正を行わなければオッケーだと思います。
Hussy
こんにちは。
たまたま来たUTF-8のメールを頼りに下記のように修正したら、一応、Becky2では日本語・トルコ語同居したまま読めるようになりましたのでご報告します。
$body = Jcode->new($body)->utf8;
$hdrs->{Subject} = Jcode->new($hdrs->{Subject})->mime_encode;
$hdrs->{'Content-Type'} = qq(text/plain; charset="utf-8");
$hdrs->{'Content-Transfer-Encoding'} = "8bit";
しかし、SubjectのMIMEはJISのままで本文はUTF-8というねじれた状態なので、サイト名やタイトルにトルコ語特有の文字を使うと化けるという状態のままです。UTF-8でMIMEエンコードする方法ってないものなのでしょうか・・・。