MT-Notifier 3.4.1のインストールと日本語化

コメントへ返信したときに、コメントしてくれた人に対して通知メールを送るプラグインとして、「MT-Notifier」がよく使われています。
先日、PhotoPierreさんから、MT-Notifierがバージョンアップして3.4.1になったことを教えていただきました。

ただ、MT-Notifierをそのままで使うと、通知メールのメッセージが英語になり、日本語部分が文字化けします。
前バージョンのMT-Notifier 3.2.7の日本語化手順は、こちらのエントリーで解説しています。
しかし、MT-Notifier 3.4.1では中身が変わっていて、3.2.7とは違う手順で日本語化する必要がありました。
そこで、インストールも含めて、MT-Notifier 3.4.1の日本語化手順を解説します。

1.MT-Notifier 3.4.1のインストール

MT-Notifier 3.4.1は、以下からダウンロードすることができます。ページの右上の方に、ダウンロードのリンクがあります。

MT-Notifierのページ

ダウンロードしたファイルは、Zip形式になっています。
ファイルを解凍すると、「php」と「plugins」の2つのフォルダができます。
「plugins」フォルダの中身を、ディレクトリ構造を保ったまま、Movable Typeの「plugins」フォルダにアップロードします(Movable Typeの「plugins」ディレクトリの中に、「Notifier」ディレクトリができるようにアップロードする)。

アップロードが終わったら、MTのディレクトリ/plugins/Notifier/mt-notifier.cgiのパーミッションを書き換え、実行可能に設定します。

2.初期化

MT-Notifierを新規にインストールする場合は、Movable Typeにログインした状態で、以下のURLにアクセスします。

http://Movable Typeのインストール先/plugins/Notifier/mt-notifier.cgi?__mode=loader

「Your system is installed and ready to use!」と表示されれば、初期化は完了です。

また、旧バージョン(2.x.x)から設定を受け継ぐ場合は、以下のURLにアクセスします。

http://Movable Typeのインストール先/plugins/Notifier/mt-notifier.cgi?__mode=import&from=n2x

なお、MT-Notifierの前バージョン(3.2.7)からバージョンアップする場合は、上記の作業は行いません。

3.送信元メールアドレスの設定

Movable Typeにログインし、「システム・メニュー」の「プラグイン」を開いて、プラグイン一覧を表示します。
その中に「MT-Notifier」が表示されますので、「設定を表示」のリンクをクリックします。
「Address to use when sending notifications and no other addresses are available:」という欄がありますので、通知メールの送信元メールアドレス(通常はご自分のメールアドレス)を入力し、「変更を保存」ボタンをクリックします。

4.コメント送信フォームの書き換え

次に、コメント送信フォームに「このコメントに返信があったらメールで通知する」というチェックボックスを追加します。
エントリーアーカイブテンプレートを開き、「<textarea・・・>~<t/extarea>」の部分を検索します。
そして、その直後に以下のタグを追加します。

<br /><label for="subscribe"><input type="checkbox" name="subscribe"> このコメントに返信があったらメールで通知する</label>

5.notifier.pmの書き換え

MTのディレクトリ/plugins/Notifier/lib/Notifier.pmを開き、651行目~654行目を書き換えます。
ファイルの書き換えが終わったら、元のファイルに上書きでアップロードします。
書き換え前後の内容は以下の通りです。

書き換え前

my $mgr = MT::ConfigMgr->instance;
my $xfer = $mgr->MailTransfer;
if ($xfer eq 'sendmail') {
  return MT::Mail->_send_mt_sendmail($hdrs, $body, $mgr);

書き換え後

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

my $enc = $mgr->PublishCharset || 'utf-8';
my $mail_enc = $mgr->MailEncoding || 'iso-8859-1';
require MT::I18N;
$body = MT::I18N::encode_text($body,$enc,$mail_enc);
$hdrs->{Subject} = MT::I18N::encode_text($hdrs->{Subject}, $enc, $mail_enc);
$hdrs->{'Content-Type'} = qq(text/plain; charset="$mail_enc");
$hdrs->{'Content-Transfer-Encoding'} = (lc $mail_enc ne 'utf-?8') ? '7bit' : '8bit';
$hdrs->{'MIME-Version'} = "1.0";

if ($xfer eq 'sendmail') {
  return MT::Mail->_send_mt_sendmail($hdrs, $body, $mgr);

6.通知メールの日本語化

Movable Typeのディレクトリ/plugins/Notifier/tmpl/emailディレクトリに、「comfirmation.tmpl」「confirmation-subject.tmpl」「notification.tmpl」「notification-subject.tmpl」の4つのファイルがあります。
これらをそれぞれ以下のように変えて、アップロードしなおします。
その際には文字コードをMovable Typeのものに合わせてください(通常はutf-8)。

・confirmation.tmpl

'<TMPL_VAR NAME=BLOG_NAME>' で、「コメントへの返信をメールで通知」のチェックがオンにされたので、確認のメッセージをお送りしています。

以下のエントリーで、「コメントへの返信をメールで通知」のチェックがオンにされました。
<TMPL_VAR NAME=RECORD_NAME>

コメントへの返信をメールで受信したい場合は、以下のリンクをクリックしてください。
<TMPL_VAR NAME=NOTIFIER_LINK>?c=<TMPL_VAR NAME=RECORD_CIPHER>

エントリーの内容を確認する場合は、以下のリンクをクリックしてください。
<TMPL_VAR NAME=RECORD_LINK>

もし、「コメントへの返信をメールで通知」のチェックをオンにした覚えがない場合は、このメールは無視してください。

・confirmation-subject.tmpl

[<TMPL_VAR NAME=BLOG_NAME>]「<TMPL_VAR NAME=RECORD_NAME>」<TMPL_IF NAME=NOTIFIER_RUNNING>へのコメントの返事の通知を受け付けました<TMPL_ELSE>へのコメントの返事の通知確認</TMPL_IF>

・notification.tmpl

<TMPL_IF NAME=NOTIFIER_ENTRY><TMPL_IF NAME=ENTRY_EXCERPT>エントリーの概要: </TMPL_IF></TMPL_IF><TMPL_IF NAME=NOTIFIER_COMMENT><TMPL_VAR NAME=COMMENT_BODY></TMPL_IF>
<TMPL_IF NAME=NOTIFIER_ENTRY><TMPL_IF NAME=ENTRY_EXCERPT><TMPL_VAR NAME=ENTRY_EXCERPT></TMPL_IF></TMPL_IF><TMPL_IF NAME=NOTIFIER_COMMENT><TMPL_IF NAME=COMMENT_NAME><MT_TRANS phrase="Author:"> <TMPL_VAR NAME=COMMENT_NAME><br /></TMPL_IF><TMPL_IF NAME=COMMENT_URL><MT_TRANS phrase="Website:"> <TMPL_VAR NAME=COMMENT_URL></TMPL_IF></TMPL_IF>

エントリーの内容を見る:
<TMPL_VAR NAME=ENTRY_LINK>

このコメントへの返信の通知を停止する:
<TMPL_VAR NAME=NOTIFIER_LINK>?c=<TMPL_VAR NAME=RECORD_CIPHER>&u=1

このサイトからの通知をすべて停止する:
<TMPL_VAR NAME=NOTIFIER_LINK>?c=<TMPL_VAR NAME=RECORD_CIPHER>&o=1

・notification-subject.tmpl

[<TMPL_VAR NAME=BLOG_NAME>] <TMPL_IF NAME=NOTIFIER_ENTRY><MT_TRANS phrase="New Entry from"> <TMPL_VAR NAME=ENTRY_AUTHOR>: <TMPL_VAR NAME=ENTRY_TITLE ESCAPE=HTML><TMPL_ELSE>「<TMPL_VAR NAME=ENTRY_TITLE ESCAPE=HTML>」に<TMPL_VAR NAME=COMMENT_AUTHOR>からコメントがありました</TMPL_IF>

7.動作の確認

ここまでの時点で、MT-Notifierが動作する状態になります。
自分でコメントを書き、メールアドレスの欄には自分のメールアドレスを入力して、「このコメントに返信があったらメールで通知する」のチェックをオンにして投稿します。

しばらくすると、MT-Notifierから確認のメールが届きます。
その中に、「コメントへの返信をメールで受信したい場合は、以下のリンクをクリックしてください。」という部分があり、URLが表示されていますので、そのURLのページを開きます。

次に、コメントに返信を書きます。その際、メールアドレスの欄には、最初のコメントは違うメールアドレスを入力します。
このコメントを投稿すると、自分あてに通知メールが送られます。

8.コメントプレビューページでもMT-Notifierを使えるようにする

コメントプレビューページにも、「このコメントに返信があったらメールで通知する」のチェックを入れて、MT-Notifierを動作させることができます。
その方法は、「MT-Notifier 3.2.7をコメント・プレビューページでも使えるようにする」のエントリーを参照してください。

9.問題点

コメントを受信すると、コメント先のエントリーなど、いくつかのページが再構築されます。
ただ、MT-Notifierを入れると、テンプレートの内容によっては、再構築に失敗して500エラーが出ることがあります。
Movable Type 3.2では再構築時のメモリ消費量が増えているようですが、それが関係しているのではないかと思います。
コメントすると毎回500エラーになるようであれば、MT-Nofitierを当面はずしておくしかなさそうです。

ちなみに、当方ではPerl版ダイナミックパブリッシングを活用するなどし、コメントを受信してもテンプレートを一切再構築しないようにして、上記の問題を回避しています。