2009-07-02 6 views
8

좋아, 나는 몇 시간 동안 그것을 빨아 먹었어. 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을 반환하는 이유입니다.

유휴 메소드는 오류를 발생시키지 않으므로 잘 작동 할 수 있습니다.

문제를 설명하는 데 도움이됩니까?

디버그를 사용하려면

8

Net::IMAP.debug = true 나는이 오래된 질문을 가로 질러 와서 그것을 자신을 해결하기 위해 원 사용합니다. 원래 오빠가 사라졌습니다. 오.

다음은 Ruby에서 IMAP 유휴 상태를 유지하는 방법입니다 (매우 멋지다). 이것은 원래의 질문에 인용 된 블록과 문서 here을 사용합니다.

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