Showing posts with label IMAProwl. Show all posts
Showing posts with label IMAProwl. Show all posts

Wednesday, October 7, 2009

IMAProwl 1.2.1

http://github.com/takuo/IMAProwl/downloads

  • String#%にHashを渡せないRuby1.9.0でもたぶん動くようにした (Formatは使えません)
  • MailBoxはUTF-7でSELECTするようにした (ASCII以外のメールボックス(ラベル)を通知対象にできる)
  • Content-TypeヘッダのないISO-2022-JPメールを受信するととんでもないことになる問題を修正
  • その他雑多な修正/変更

ふと気がついたけど、"[Gmail]/All messages"を監視対象にすると、フィルタで受信トレイをスキップしてても通知できる。まぁ当たり前だが。
今回、UTF-7対応したので日本語のラベルも監視可能になった。"[Gmail]/すべてのメール"とか。

Tuesday, September 29, 2009

IMAProwl 1.2.0

http://github.com/takuo/IMAProwl/downloads

主な変更点
  • 設定項目名 "Interval" を "Timeout" に変更した (Intervalのままでも一応動く)
  • 件名と差出人のフォーマットを定義できるようにした
    • Format: "%{subject} (%{from})" => "件名 (名前)"
    • Format: "%{subject} (%{name} <%{addr}>)" => "件名 (名前 <address@example.com>)"
    • "%{from}" は、名前を優先して、無い場合はアドレスを使用する
  • SubjectLengthのデフォルト値変更 (30から20へ)

Edit: Debian lennyのruby1.9など、若干古いRuby1.9.0では動作しないようです。sid の ruby1.9 1.9.0 (2008-10-04 revision 19669)なら動きます。

Saturday, September 26, 2009

IMAProwl 1.1.2

http://github.com/takuo/IMAProwl/downloads

メールの本文について、元のエンコーディングがわからなくてもとにかくUTF-8に変換するようにしました。
String#encode バンザイ。

mutexのdouble lockが発生するとの報告がありますが、再現しないのでいまのところわかりません。

Debian sidには明日のミラーで降りてくることでしょう。

Thursday, September 17, 2009

IMAProwl 1.1.0

http://github.com/takuo/IMAProwl/downloads

まだ master にマージしてないのだけど。
いろいろテスト的な実装をして安定していたのでタグ打ち。
  • Iconvを使うのやめて、String#encodeで文字コード変換するようにした。Iconvはクセがありすぎる。
  • マルチパートメールの場合、頑張ってtextパートを探して本文の通知に使うようにした。
大きなところはこんな感じで。もうだいぶ安定して動いてるようだ。

Wednesday, September 16, 2009

IMAProwl 1.0.0

http://github.com/takuo/IMAProwl/downloads
ようやく1.0.0ということに

  • NKF使うのやめてIconvを使うようにした
  • 日本語以外のメールも正しく通知できるようになった
  • テキスト処理中での例外処理対応を増やして、エラーになってもがんばって通知だけはするようにした
  • 本文がテキストじゃない場合は本文を通知に含めないかわりに、メディアタイプだけ通知するようにした
  • ほんとはテキストのパートを探してテキストを通知したいのだけど、面倒
  • 通知する件名の文字数を指定できるようにした
WindowsではIconvが標準じゃないので、ロードに失敗したらNKF使うようになってます。(たぶん)
iconv.dllを適切な場所に置いとけば問題ないかと。(たぶん)

Debianパッケージとして正式にuploadしてあるので、Debian sidの環境では
apt-get update && apt-get install imaprowl
cp /usr/share/doc/imaprowl/examples/config.yml ~/.imaprowl.conf
などとして、~/.imaprowl.confを修正してお使いください。
(9月17日以降)


既知のバグ
・prowl serverが死んでるときにsendした通知がリトライされない。(fixed in 1.0.1)

Tuesday, September 8, 2009

IMAProwl 0.9

http://github.com/takuo/IMAProwl/downloads

daemon modeの実装と設定ファイルの位置を変更しました。

設定ファイルは
  1. -c オプションで指定
  2. ~/.imaprowl.conf
  3. `pwd`/imaprowl.conf
  4. `pwd`/config.yml (deprecated)
  5. basename(imaprowl.rb)/imaprowl.conf
の順番で探して読み込みます。

daemon modeはWindowsでは機能しません。

コマンドラインオプション
$ ./imaprowl.rb --help
Usage: imaprowl [options]
-c, --config FILENAME Specify the config file.
-q, --daemon Enable daemon mode.
-d, --debug Enable debug output.

これでdebつくればDebianにuploadできるかもしれない。な。

Saturday, September 5, 2009

IMAProwl 0.8

http://github.com/takuo/IMAProwl/downloads

やっと安定した感があります。
それと、IDLEが使えないIMAPサーバでも動作するようになりました。
たぶん、imap.softbank.jp でも使えます。

0.8での変更点
IDLEが使えない場合、NOOPにより新着チェックするようにした。
NOOPInterval: 15 とか設定しておけば15秒置きにチェック。

0.7.1での変更点
GMail以外のサーバでチェック後に既読にしてしまう問題を修正。

0.7での変更点
不測のブロッキング問題に対処(たぶん直った)。

Friday, August 28, 2009

IMAProwl 0.6

0.5でログの出力にLoggerクラスを使用するようになりましたが、ちょっとデッドロックしないかと不安です。
一応手元では安定してるみたい。

http://github.com/takuo/IMAProwl/tree/0.6.1

0.6でrubygemsとgemで配布されているprowlライブラリを使うのやめました。
ていうかHTTP/POSTのAPI使うだけなのにAPIライブラリもってくるのもなんか大袈裟だな、と。
まぁ本当の理由はHTTP Proxyを使えない作りになってたからなんですが。

というわけでProwlAPI呼ぶときにHTTP Proxyつかえるようになりました。

ついでにProwlにPriorityパラメータを渡せるようになってます。
アカウントごとに設定できます。
キーワードでマッチさせてPriority変えるようなことはできませんし、今後もするつもりもないです。
GMailですとフィルタとラベルがつかえるので、MailBoxを変えたアカウント定義を用意すれば実現は可能かな。

Edit: 0.6.1: Priority が送信されてない問題修正

Tuesday, August 25, 2009

IMAProwl on Windows

WindowsでIMAProwlを動かす手順

ところで、rubygemsのprowlライブラリはhttp_proxyに対応してないみたい。
そのうちなんとかするか。

MS-Win32のRuby1.9.1を手にいれる。
http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.html
64bit環境ではx64でもいいけど面倒になりかねないので、とりあえず32bitにしたほうが無難。
適当に展開して、D:\ruby\ とかに移動しておく。




OpenSSL for Windows をインストールする。
http://www.slproweb.com/products/Win32OpenSSL.html
Win32 OpenSSL v0.9.8k Light でよさそう。適当にインストール。

zlib をインストール。IMAProwl自体には必要ないけれども。
http://gnuwin32.sourceforge.net/packages/zlib.htm
binaryのzipをダウンロードしてbin\zlib1.dll を ruby\bin\zlib.dll としてコピー

おなじくreadlineも
http://gnuwin32.sourceforge.net/packages/readline.htm
binaryのzipをダウンロードしてbin\readline5.dll を ruby\bin\readline.dll としてコピー

github.com から IMAProwlをdownloadしてd:\IMAProwl とかに展開、config.yml を設定して実行。



WindowsでRubyスクリプトをバックグラウンド動作させるのは残念ながら方法を存じません。
なんかサービス化ツールがあったかもしれない。
OS Xは基本的にUNIXだからもっと簡単なのかなぁ。

Edit: 0.6からgem不要になったので削除

IMAProwl 0.4

安定して動いてるのでリリース
  • base64, quoted-printable な本文もデコードしてnotifyするようにした
  • notification に添付する本文の長さを、設定項目"BodyLength"で設定できるようにした (default: 100, MAX: 1000)
  • IMAPでのヘッダ取得方法を変更
  • IMAP/SSLのcertificate check をしないように変更
  • そのた雑多な変更
  • Ruby 1.9.0 (Debian sid), Ruby 1.9.1(mswin32)で動作確認.

OS Xで動作確認したいけど、OS Xは環境がないなぁ。
後日Windowsでの導入手順でも書いてみます。

Edit: update to 0.4.1
Edit: まちがえてコミットしちゃいけないもんをコミットしてしまったのでリポジトリ作りなおしました。0.5になっとります

Sunday, August 23, 2009

IMAProwl 0.3

というわけで IMAProwl 0.3はRuby 1.9以上を動作対象とすることになりました。
これでサーバ側から不意に切断されても大丈夫になったかと思われます。

http://github.com/takuo/IMAProwl

ところで IMAProwl は IMAP IDLEコマンドで監視を実現していますが、公開サービス系のIMAPサーバはIDLEが使えないことが多いそうです。
たとえば iPhone の i.softbank.jp ではつかえません。

こういったサーバでこのスクリプトはつかえないので、もし必要なひとがいたら実装してみてください。
もともと GMail を push するのが目的ですし、自分は GMailおよびGAfYDでしかIMAPつかってないので・・・。


Thursday, August 13, 2009

IMAProwlを更新

IMAProwl更新。
http://github.com/takuo/IMAProwl

一応RFC的にはIDLEしてから30分間は何もせず待ってていいことになってるのだけど、すべてのサーバが準拠しているとは限らないので一応サーバごとに任意の間隔で再IDLEするように変更。
 -
Application: IMAPServer
User: gonbe
Pass: himitsu
Host: imap.example.com
Interval: 10

config.ymlにこんな感じでIntervalを定義する。分単位で0にすると再IDLEチェックしない。デフォルトで20分。
GMailのサーバは定期的にEXISTSを送ってきてそのたびにUNSEENチェックと再IDLEが入るので特に何もしなくていいのです。(0にしといていい)
NOOP じゃないのはIDLE中は Tagged command を発行できない(DONEしか発行できない)ため。

あと、なんかのタイミングでスレッドがデッドロックして死ぬのを確認しているけど再現性がわからないのでとりあえず放置
#!/bin/sh

while true; do
./imaprowl.rb
sleep 3
done
こんなんしとけばとりあえずいいかと。

http://github.com/takuo/IMAProwl

余談ではあるけど、近頃セムパイが監訳なさったgit本が発売されたので宣伝。

Wednesday, August 12, 2009

IMAProwl - ProwlでIMAPの新着をiPhoneへpush notificationする


GPushがあまりにも不甲斐なかったので、自作したわけです。

ええと、IMAPやGMailの着信通知をiPhoneにPushしたい。
そんな要望にこたえるのがGPushというアプリであった。

しかし、GPushはGMailのアカウント情報をGPushのサーバに知らせなくてはいけない(らしい)。
そんなことは絶対したくない。パスワードを見知らぬ外部サイトに登録するなんてとんでもない。
しかもなにやら、サーバ側のトラブルでGPushはいま公開停止になっているとか。

そこで、代替手段を考えていたところ、ProwlというのがあってこれはGrowlというOS X用の通知アプリケーションと連携してiPhoneへPushできるんだそうだ。
なかなかすばらしい。Windows版もあるみたい。
ProwlアプリはAppStoreで購入できる。

そして、いろいろ調べているとこの Prowl、厳密にはGrowl専用というわけではなくてAPIが公開されており、各種言語用のAPIライブラリもあった。
こりゃー自作するしかないでしょう。

つうわけで、1時間ほどでできたのが IMAProwl。
Rubyです。

準備
  • Prowlにアカウント作ってください
  • AppStoreからProwlを買ってください

チェックアウトと、ruby/prowlのインストール
git clone git://github.com/takuo/IMAProwl.git
gem install prowl

config.ymlを編集する。
複数のアカウントを登録できます。
Prowl:
APIKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Accounts:
-
Application: GMail
User: example@gmai.com
Pass: secret
Host: imap.gmail.com
Debug: true
-
Application: Example
User: gonbe
Pass: himitsu
Host: imap.example.com
MailBox: news
Debug: true

Prowl::APIKey にはProwlアカウントで発行したAPI keyを。
あとはimaprowl.rbを実行するだけ。

注意
  • SSL専用です。PORTが993でない場合は Port: を定義。
  • UNSEENをチェックするフォルダが INBOXでない場合は MailBox: を定義
  • notificationキャッシュはオンメモリなので再起動するとすべてのUNSEENメッセージをnotificationしちゃいます。
  • まだ気に入らない部分がいくつかあり、完成ではないです。