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

2006年1月7日 MT-Notifierが3.4.1にバージョンアップして、日本語化手順が変わりました。
3.4.1での手順はこちらのエントリーを参照してください。

「MT-Notifier」は、コメントへ返信したときに、コメントしてくれた人に対して自動で通知メールを送信するなど、Movable Typeに通知機能を追加するプラグインです。
Movable Type 3.2では、従来のMT-Notifier(バージョン2.x.x)は動作しなくなり、MT3.2専用のものが必要になりました(本エントリー投稿時点ではバージョン3.2.7)。
そこで、MT-Notifier 3.2.7のインストールと、通知メッセージを日本語化する手順をご紹介します。

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

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

MT-Notifierのページ

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

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

2.初期化

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

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を開き、以下の3箇所を書き換えて日本語化します。
ファイルの書き換えが終わったら、元のファイルに上書きでアップロードします。その際、文字コードに注意してください(Movable Typeの文字コードに合わせる)。

・435行目付近
書き換え前

if ($entry) {
  $head{'Subject-Pending'} =
    $app->translate("Please confirm your request to $record_text \'[_1]\'", $entry->title);
  $head{'Subject-Running'} =
    $app->translate("You have subscribed to $record_text \'[_1]\'", $entry->title);

書き換え後

if ($entry) {
  $head{'Subject-Pending'} =
    "「" . $entry->title . "」へのコメントの返事の通知確認";
  $head{'Subject-Running'} =
    "「" . $entry->title . "」へのコメントの返事の通知を受け付けました";

・570行目付近
書き換え前

if ($comment) {
  $head{'Subject'} .=
    $app->translate('New Comment from \'[_1]\' ', $comment->author).
    $app->translate('on \'[_1]\' ', $entry->title);

書き換え後

if ($comment) {
  $head{'Subject'} .=
    "「" . $entry->title . "」に" . 
    $comment->author . 'からコメントがありました';

・625行目付近
書き換え前

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);
if ($hdrs->{'Subject-Running'}) {
    $hdrs->{'Subject-Running'} = MT::I18N::encode_text($hdrs->{'Subject-Running'}, $enc, $mail_enc);
}
if ($hdrs->{'Subject-Pending'}) {
    $hdrs->{'Subject-Pending'} = MT::I18N::encode_text($hdrs->{'Subject-Pending'}, $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」と「notification.tmpl」の2つのファイルがあります。
これらをそれぞれ以下のように変えて、アップロードしなおします(その際には文字コードに注意してください)。

・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>

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

・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_TEXT></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

7.動作の確認

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

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

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

8.問題点

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

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

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください