IMAProwlを使ってメール受信をプッシュ通知で知らせる

IMAPアクセス可能なメールアカウントの受信ボックスを監視し、iPhoneアプリのProwlにプッシュ通知するRuby環境で動作するIMAProwlをAndroidで使用するためのTipsです。

IMAProwl-notification-on-Android

IMAProwlの仕組みとAndroidで使用するためのTips

IMAProwlはメールサーバーの新着メールを確認し、差出人や件名、本文の一部をProwl APIを使ってProwlアプリをインストールしたiPhoneへプッシュ通知してくれます。通知を受け取ったら後はメーラーを起動してメールサーバーと同期するだけです。Androidで使用するためにはProwlではなくNotify My Android(以下、便宜上”NMA”と略称で記述する場合があります)というアプリを使います。

IMAProwl with NMA Chart

iOSでProwlを利用

iPhone/iPadはApp StoreからProwlをインストールします。利用方法は以下と同様ですが、Android向けの改修はなくそのまま使うことが出来ます。

Prowl: Growl Client 1.4
ユーティリティ, 仕事効率化
App Storeで詳細を見る

Notify My Androidをインストールしアカウントを取得する

AndroidマーケットにあるNotify My AndroidというProwlライクなアプリを使います。有料アプリですがプッシュ通知の快適さからすれば十分に価値があります。インストール方法やAPIキーの取得方法はNotify My Android – AndroidにGrowl通知をプッシュするアプリを参考に準備してください。

Notify My Android 2.2.13
カテゴリ: 通信
Google Playで詳細を見る

Ruby環境を用意する

常時監視させるために今回もレンタルサーバーでセットアップしました。さくらレンタルサーバーでのRuby環境の構築はTwiProwlをレンタルサーバーに導入する備忘録をご参考にどうぞ。

IMAProwlの入手

takuo / IMAProwlからダウンロードするか、母艦側で適当なディレクトリで以下を実行します。

% git clone https://github.com/takuo/IMAProwl.git

config.ymlで環境設定

IMAProwlの設定ファイルconfig.ymlを自分用にカスタマイズします。

## -*- encoding: utf-8 -*-
##
## example configuration (version >= 1.2)
##
## if undefine LogDir, Debug mode is forcefully enabled.
LogDir: /home/you/logs/ #自分の環境に合わせます
Debug: false
Daemon: true #さくらサーバーはデーモンモードで動作しないのでfalseにします

## API Key can be defined up to 5-keys with comma separated values.
Prowl:
APIKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx #NMAで取得したAPIキーを貼り付けます

## IMAP Accounts.
Accounts:
#AndroidはGmailをプッシュ通知しますのでGMail部分は削除します
Application: GMail
User: yourname
Pass: password
Host: imap.gmail.com
BodyLength: 100
SubjectLength: 20
Priority: 0
Format: “%{subject} (%{name} <%{addr}>)”
Timeout: 7 # Timeout for NoResponse during IDLE. Recommend you set 6-7 for GMail. (in minutes)

#←このセパレーター ‘-‘は削除しないでください
Application: SoftBank #以下、自分の環境に合わせます
User: yourname
Pass: password
Host: imap.softbank.jp
BodyLength: 256
SubjectLength: 20
Priority: 0
Format: “Subject:%{subject} From:%{from}”
NOOPInterval: 20 # NOOP(check) interval with no-IDLE mode. (in seconds)
NoIDLE: true # unnecessary, because it should be auto-detected.
Enable: false # diable this account. Set true to enable this account. #trueにします

わたしはMobileMeを使用していますので、上記のSoftBankをMobileMeの環境に合わせて変更しました。インターバルはサーバーへの負荷などを考慮して変更します。

imaprowl.rbスクリプトの修正

次に、imaprowl.rbのProwl APIをNMA APIに修正します。31行目辺りにあるPROWL_API_ADDを次のように変更します。

PROWL_API_ADD = “https://prowl.weks.net/publicapi/add” #修正前
PROWL_API_ADD = “https://nma.usk.bz/publicapi/notify” #修正後

なお、さくらサーバーで動かす場合は、自分で環境構築したRuby1.9を指定する必要がありますので、1行目をフルパスに修正しておきます。

imaprowl.rbをテストしてみる

レンタルサーバーで動かす場合はCyberduck等で適当なディレクトリに転送します。imaprowl.rbを実行し、メールを送信してAndroidがプッシュ通知を受け取ることができるかどうかテストします。うまくいかない場合は、起動時のエラーメッセージや、config.ymlのデバッグモードをtrueにしてログを確認しながら解消します。

IMAProwlの動作状況を監視する

IMAProwlはメールサーバーを監視する重要な役割を担いますので、常駐してもらう必要があります。再起動したり、何かの拍子にプロセスが落ちたりしてしまう可能性もありますので、そのような場合には再度立ち上げるために次のようにスクリプトを作ってcronに登録しておきます。

#!/bin/sh

ps ax | grep ‘ IMAProw[l]’

if [ $? -eq 1 ]; then
cd /home/user/IMAProwl #imaprowl.rbのフルパスを指定
./imaprowl.rb & #デーモンモードの場合は&を削除
fi

さいごに

テスト実行したIMAProwlを終了させcronに登録したスクリプトが正常にIMAProwlを再度立ち上げてくれるか確認します。プロセスを確認できれば完了です。

実は、Notify My AndroidにはNMAMailというapikey@nma.usk.bzにメールを転送するとプッシュ通知してくれるサービスがあります。これを使えばIMAProwlは不要になりますが、残念ながらUTF-8以外の日本語が文字化けしてしまうので実用的ではないように思います。