Email2AddressBook プラグイン
Category:[コールバック, 自作プラグイン]
Tag:[Email2AddressBook, MovableType, Plugin]
空メールを送信することで Movable Type のアドレス帳にメールアドレスが登録できるプラグインを公開します。
1.動作概要
以下に、空メールを送信してから、Movable Type のアドレス帳にメールアドレスが登録されるまでの動作概要を示します。

- アドレス帳に自分のメールアドレスを登録してほしいユーザーは、パソコンや携帯などから空メールを、特定のメールアドレスに送信します(①)。空メールで送信するメールタイトルはプラグインで予め決めておき、それを送信ユーザーに伝えておきます。
- スケジュールタスクから周期的に MailAdressSubscriber プラグインを起動し、メールをチェックします(②)
- プラグインで設定したタイトルと同じタイトルが見つかった場合、該当のメールを処理します(③)
- 処理したメールのメールアドレスに、アドレス帳登録確認メールを返送します(④)
- 確認メールを受信したユーザーは、確認メールに表示されているリンクをクリックすることで登録が完了します(既存動作)(⑤)
以前、「Movable Type でメールマガジンを作る」というエントリーで、メールマガジン方式で自分のメールアドレスを送信してアドレス帳に登録する方法を紹介しましたが、「自分のメールアドレスが分からない人が多いので」という要望で、このような動作を行うプラグインを開発しました。
2.動作環境
動作環境として、スケジュールタスクの起動が必要です。また、下記の Perl モジュールが必要です。
- Net::POP3
- MIME::Base64
- Email::Address
MT のメール系のプラグインやメール処理では、MIME::Parser がよく使われるので、最初はそれを利用しようと思いましたが、サーバ環境によって正常に動作しないケースが多いため、今回は利用しないことにしました。
Email::Address はレンタルサーバではインストールされていない可能性が高いので、CPAN でインストールするか、インストールが分からない場合は、「Source」を右クリックして、「名前を付けてリンク先を保存」を選択し、Address.pm という名前で保存します。あとはそのファイルを、Movable Type の extlib ディレクトリの下に Email ディレクトリを作ってその下に置けば動くと思います。
あと、Movable Type 4.2 以降の場合、環境変数で EnableAddressBook を有効にしてください。
3.Email2AddressBook プラグインのダウンロード
下記の Email2AddressBook.zip をクリックして、プラグインアーカイブをダウンロード。
2009.05.18 初版(α版です)
プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
4.Email2AddressBook プラグインのアップロード・インストール
プラグインアーカイブを展開し、中にある Email2AddressBook フォルダごと、Movable Type のアプリケーションディレクトリの plugins ディレクトリにアップロード。
システム管理画面のプラグイン一覧で、「Email2AddressBook~」が表示されればインストール完了です。

5.プラグインの設定
システム管理画面の「ツール」→「プラグイン」→「Email2AddressBook」→「設定」をクリックして、下記の項目を設定します。
- ブログのID番号:アドレス帳を追加したいブログのID番号
- POPサーバー:プラグインからアクセスするPOPサーバ
- プロトコル(デフォルトはpop3):プロトコル
- アカウント:メールのアカウント
- パスワード:メールのパスワード
- 登録検出用受信メールタイトル:空メールに設定するタイトル(注:半角英数のみ)
- メールの削除:空メールを検出する処理でメールをどのように削除するかを選択。「選択されたメールのみ削除」を推奨。「すべてのメールを削除」を選択すると、空メールの有無にかかわらずスケジュールタスクで処理したPOPサーバ上のメールを削除します。「削除しない」を選択すると、POPサーバのメールは削除しませんが、手動で空メールを削除しておかないと次のスケジュールタスクで空メールが重複処理されます

とりあえず、設定したタイトルのメールを検出したら次のようなログを出すようにしています。

一応、手持ちの環境を使って、携帯からの空メール送信によって携帯のメールアドレスをアドレス帳に登録できることは確認しましたが、すべての環境で動作することを保障するものではありません。
- Movable Typeの画像アップロード時にリサイズできる「UploadImageResizerプラグイン」
- Movable Typeで選択したカテゴリの親カテゴリを一括選択できる「ParentCategorySelectorプラグイン」
- Movable Typeのブログ記事投稿画面でカテゴリを一括選択できる「AllCategorySelectorプラグイン」
- Movable Typeで指定文字列を含むコメントを拒否する「CustomizedCommentfilterプラグイン」
- Movable Typeでブログ権限付与時に親ウェブサイト名を表示する「AssociationBlogDiscriminatorプラグイン」
- Movable Typeのカスタムフィールドを一覧画面で編集できる「ListingFieldEditorプラグイン」
- IE9でMovable Typeの管理画面を操作できるようにする「EmulateIEプラグイン」
- Movable Typeの記事更新履歴をクリアする「RevisionRemoverプラグイン」
- Movable Typeで携帯サイト向けに画像を縮小表示する「ImageSizeModifierプラグイン」
- Movable Type 5のテンプレート編集画面でタブ文字が入力できる「TextareaTabEnablerプラグイン」
- Movable Typeの投稿コメントのメールアドレスを半角に変換する「CommentEmailByteChangerプラグイン」
- Movable Typeで記事アイテムのリビジョン管理ができる「RevisableAssetプラグイン」
- CurrentStyleプラグイン
- Movable Type 5でお気に入りリストが作れる「Linklistプラグイン」
- 記事一覧画面にアイテムを表示する「EntryAssetListingプラグイン」
- Movable Typeのカレンダーを月曜日始まりにする「MondayCalendarプラグイン」
- ウィジェットセット更新時にインデックステンプレートを再構築する「RebuildByChangeWidgetプラグイン」
- アイテム更新時に関連記事を再構築する「RebuildByUpdateAssetプラグイン」
- Movable Typeの本文フィールドの表示オプションを有効にしたりドラッグできるようにする「BodyFieldCustomizerプラグイン」
- BodyFieldEraserプラグイン
こんばんわ^^
こちらのプラグイン使わせて頂きました。
ですが、期待する動作してないので質問させてください。
POP サーバには Gmail の POP サーバを指定して TRY してみたのですが、記事を読む限り Gmail 宛てに空メールを送ると、送信元( 携帯 )に確認メールが届くと理解してますが届きませんでした。
また、ログにもスケジューリングされた形跡がないようです。
またまた、エラーログが出力されたことがありまして、Email2AddressBook.pl 内の 68 行目でエラーしてまして、サーバに接続できてないようでした。
1. cron を使用して run-periodic-tasks を定期実行するということでよかったですか!?
2. 空メール送信先は Gmail だとダメでしょうか。
環境は MT4.24 で、空メールタイトルには 'MT-MEMO' としてます。
お手数ですがよろしくお願いいたします。
>bzbellさん
こんばんは。
ご質問の件ですが、1.はその通り(TeraTerm等が利用可能であれば、cronではなく、ダイレクトにrun-periodic-tasksを起動してもOKです)で、2.の Gmail は今のところNGです。情報不足ですいません。
ちなみに Gmail の POP サーバには SSL でアクセスする必要があるので、Net::POP3::SSLWrapper を追加して、Email2AddressBook.pl の内容に青色部分を追加する必要があるようです(動作は未確認)。
…前略…
use MT;
use MT::App;
use Net::POP3::SSLWrapper;
…中略…
sub _regist_email {
…中略…
my $delete = $plugin->get_config_value('e2a_delete_mail');
pop3s {
my $mpop = Net::POP3->new($server, Port => 995) or die "Can't not open server.";
…中略…
}
$mpop->quit();
};
}
…後略…
http://search.cpan.org/~tokuhirom/Net-POP3-SSLWrapper-0.01/lib/Net/POP3/SSLWrapper.pm
それではよろしくお願い致します。
こんにちわ^^
返答ありがとうございます。
Gmail は SSL が標準なんですかぁ。だから認証でエラーしてたんですね(; ̄∇ ̄A
教わったモジュールを使ってみようと思ったのですが、Net::POP3 の使い方見たら、サーバ上にあるメールすべてを取得しちゃうようなので、Gmail だと根本的にマズいことが分かりました。
未読のメールのみ取得できればいいんですけどね (●´∀`●)
Net::IMAP::Simple だと未読メールのみ取得できるようでした。
お忙しいところありがとうございました。
「Movable Type でメールマガジンを作る」でコメントさせていただいたあひるです。
プラグインとしてつくっていただきありがとうございます。
おおっー!とさっそく使おうとしましたが「スケジュールタスクから周期的に MailAdressSubscriber プラグインを起動し、メールをチェックします(②)」でまずおろおろし、さらに空メール用のアドレス設定を間違えていたのに気がつかず四苦八苦。
やっとできるようになりました\(^o^)/
すぐにお礼のコメントが入れられなくてすみませんm(__)m
ただ、cronから不定期に
/virtual/hogehoge/cron.sh: line 3: 25743 Killed /usr/bin/perl ./tools/run-periodic-tasks
のようなメールが来ます。
これは無視してもいいのでしょうか。
また、MTで複数のブログを運営している場合はどれか一つしか指定できませんか。
たびたびお手数をおかけしますがよろしくお願いいたます。
>bzbellさん
こんにちは。
情報ありがとうございました。
未読分はその通りで、そのため削除オプションを設けていますが、α版は空メール専用のメールアドレスを使うことを想定してもらった方が良いかもしれません。
Net::IMAP::Simple::SSLもあるようなので、モチベーションがあがったら確認してみたいと思います。
>あひるさん
こんにちは。
コメントありがとうございます。
うまく動作したようで良かったです。
なおこのプラグインは今のところ、システムでひとつしか対応していません。
それではよろしくお願い致します。
はじめまして。いつも見させていただいています。
MTOS4.261にインストールして利用しようと考えていたのですが、
システムメニューのプラグイン一覧画面で「読み込みに失敗しました」
という表示がでてきました。
MTOSでは利用できないプラグインなのでしょうか?
>ふくころさん
こんばんは。
ご質問の件ですが、本プラグインはMTOSでも動作します。
確認ですが、システム管理画面の「ツール」→「ログ」で以下のようなメッセージが出力されていますでしょうか。
プラグインでエラーが発生しました: ~/plugins/Email2AddressBook/Email2AddressBook.pl Can't locate Email/Address.pm in @INC (@INC contains: ~/plugins/Email2AddressBook/lib ~/extlib ~/extlib lib C:/usr/site/lib C:/usr/lib .) at ~/plugins/Email2AddressBook/Email2AddressBook.pl line 54. BEGIN failed--compilation aborted at ~/plugins/Email2AddressBook/Email2AddressBook.pl line 54. Compilation failed in require at lib/MT.pm line 1293.
そうであれば、2項のEmail::Addressがインストールされていないので、説明にしたがってインストールしてください。2項の説明にある「Source」をクリックした先のURLは下記です(以下のURLで表示された内容をAddress.pmというファイル名で保存します)。
http://cpansearch.perl.org/src/RJBS/Email-Address-1.889/lib/Email/Address.pm
設定方法が不明な場合はお手数ですが再度ご連絡ください。
それではよろしくお願い致します。
いつも書籍とあわせて非常に参考させていただいています。
現在、こちらのプライグインを使用して空メールでアドレス帳への登録機能の導入を試みている者です。
バージョンがMTOS 5.02なのですが、使用は不可能でしょうか??
cron実行時に、
'Email2AddressBook'の実行中にエラーが発生しました: Can't locate object method "errtrans" via package "MT" at /home/lady-killer/www/mt/plugins/Email2AddressBook/Email2AddressBook.pl line 111.
というログが残っていて、うまく行きません・・・
お忙しい中恐縮ですが、宜しく御願いいたします。
素晴らしいプラグインの公開をありがとうございます。
現在システムのプラグイン設定からブログIDを入力しますが、各ブログでメール登録をするにはどのようにすればよろしいでしょうか
宜しくお願い致します
