2012-03-27 3 views
2

Mit Rubin 1.9.3p0Rubin 1.9.3 - Net :: IMAP-Liste und Status Methoden Antwort sehr langsam

Unten ist mein Ruby-Skript anzuzeigen, von meinem Google Mail-Konto, alle Namen Ordner und der Nachrichten zählen in jeder Mailbox.

Ruby-Script

ENV['SSL_CERT_FILE']='/etc/ssl/certs/cacert.pem' 

    begin_ = Time.now 

    require 'net/imap' 

    server='imap.gmail.com' 
    port = 993 
    username = '<MY-GMAIL-USER-ID>' 
    password = '<MY-PASSWORD>' 

    imap = Net::IMAP.new(server,port,true) 
    imap.login(username, password) 

    list = imap.list("", "*") 

    puts "Gathering Data" 

    folders_count_hash = Hash[ list.map do |a| 
            [a.name, imap.status(a.name, ["MESSAGES"])["MESSAGES"]] unless a.name == "[Gmail]" 
           end ] 

    total_time = Time.now - begin_ 
    puts "Gathered Data"       
    puts "Total Folders :#{folders_count_hash.size}" 
    puts "RUNTIME: #{total_time}" 

    folders_count_hash.each do |name, count| 
     puts "#{name} (#{count})" 
    end 

    imap.logout() 
    imap.disconnect() 

Ausgabe des obigen Skript:

Gathering Data 
    Gathered Data 
    Total Folders :193 
    RUNTIME: 189.38250329 

Wie aus der Laufzeitwert der Ausgabe zu sehen ist es 3 Minuten nahm die Daten zu sammeln.

Ich muss verstehen, was Grund hinter solch langsamem Verhalten ist. Liegt es an so vielen Ordnern in meinem Konto oder an der Netzwerkgeschwindigkeit oder am Ende von GMail, dass die Antwort zurückgegeben wird?

Kann diese Verzögerung reduziert werden? Wenn ja, wie kann ich das gleiche erreichen?

Danke,

Jignesh

+0

ein sehr ähnliches Problem haben ... – sethvargo

+0

Try telnet (openssl für gmail) openssl s_client -connect imap.gmail.com:993 x anmelden x Liste "" "*" x logout –

Antwort

0

ich diesen Code ausführen und eine Antwort in 11 Sekunden, aber ich habe nur 39 Ordner.