2009-07-02 9 views
8

[OK]を、私は何時間も吸うされています。 net/imap.rbはruby 1.9でアイドルコマンドをサポートしていましたが、まだはありません。ルビーのIMAP IDLEのサポート

誰でもその実装を手伝ってもらえますか?

class Net::IMAP 
    def idle 
    cmd = "IDLE" 
    synchronize do 
     tag = generate_tag 
     put_string(tag + " " + cmd) 
     put_string(CRLF) 
    end 
    end 

    def done 
    cmd = "DONE" 
    synchronize do 
     put_string(cmd) 
     put_string(CRLF) 
    end 
    end 
end 

をしかし、それだけを返すゼロでimap.idle:hereから、私はこれが働くだろうけれども。

+0

これをルビー1.8.6と試してみましたが、それは完全に機能しました。 – opsb

答えて

1

本当に機能していませんか?あなたはそれがソケットを介して送信した文字列を見ましたか?

デバッグが有効になっていない限り、put_stringがnilを返すように見えるので、imap.idleはnilを返します。

アイドル状態のメソッドは、エラーをスローしないため、正常に動作している可能性があります。

これは動作の説明に役立ちますか?

デバッグを使用したい場合は、Net::IMAP.debug = true

8

を使用し、私はこの古い質問に出くわしたし、それを自分で解決したかったです。元の尋問者は消えてしまった。

ここでは、IMAPアイドルがRubyで動作する方法を説明します(これは超クールです)。これは、元の質問に引用符で囲まれたブロックと、文書hereを使用します。

@Peter

imap = Net::IMAP.new SERVER, :ssl => true 
imap.login USERNAME, PW 
imap.select 'INBOX' 

imap.add_response_handler do |resp| 
    # modify this to do something more interesting. 
    # called every time a response arrives from the server. 
    if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS" 
    puts "Mailbox now has #{resp.data} messages" 
    end 
end 

imap.idle # necessary to tell the server to start forwarding requests. 
+0

これは、(30分後の)有効期限が切れる前に、imap接続を更新しますか? – ckarbass

+1

@ckarbass:いいえ、そうではありません。私の完全なコード例をここで見てください:http://paste.ly/5wrj。 – Peter

+1

@Peter申し訳ありませんが、paste.lyのリンクが切れています。サンプルをhttp://gist.github.comのような別のサービスに再送信してもよろしいですか?私はまったく同じ質問に興味があるので、この例を見たいと思う。 – Overbryd

0

私はIDLE IMAPソリューションを拡張する方法についていくつかの研究を行ってきました。私は今、基本的に2つの選択肢を考えています。

オプション1:連続ループ上のすべてのアカウントをメールでチェックするデーモンを実行します。

オプション2:アカウントごとにIDLE接続を開き、更新を受信します。

私のアプリは複数(おそらく数千または数十万のアカウント)を扱っているので、オプション2は不可能と思われます。私の最善の策は、オプション1を使用して、いくつかの種類の最大値を打った後、サーバーを複数のワーカーに分割することです。

基本的なコード/アイデアがここにhttp://railspikes.com/2007/6/1/rails-email-processing

+0

IDLEがRailsアプリケーションでGmailを使って作業するのをやってきました。私はかなり似たようなことをやっています:https://gist.github.com/jem/2783772 - しかしそれは、ワーカーが再起動したときにあらゆる種類の問題を引き起こします。すべてのスレッドでかなり忙しくなります。 あなたの回答から、たくさんのユーザーと一緒にIDLEを利用することに幸運を覚えましたか?ヒント、テクニック、提案はありますか? – Domness

関連する問題