OK, j'ai été sucé pendant des heures. Je pensais net / imap.rb avec Ruby 1.9 soutenait la commande inactive, mais pas encore.
Quelqu'un peut-il m'aider à mettre en œuvre cela? De ici , je le ferais: P>
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
4 Réponses :
Êtes-vous sûr que cela ne fonctionne pas? Avez-vous regardé les chaînes qu'il a envoyées sur la prise? P>
Après avoir fait des creuser, il ressemble à Put_string retourne nil à moins que vous n'ayez débogué activé, c'est pourquoi IMAP.Idle retourne nil. p>
Donc, votre méthode inactive pourrait très bien fonctionner car elle ne lance pas d'erreurs. P>
Cela aide-t-il à expliquer le comportement? P>
Si vous souhaitez utiliser le débogage, utilisez net :: imap.debug = true code> p>
Je suis tombé sur cette ancienne question et je voulais résoudre moi-même moi-même. L'adresseur d'origine a disparu - oh bien.
Voici comment vous obtenez IMAP inactif travaillant sur Ruby (c'est super cool). Cela utilise le bloc cité dans la question initiale et la documentation ICI . P>
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.
Cela renouvelle-t-il la connexion IMAP avant son expiration (soi-disant après 30 minutes)?
@CKARBASS: Non, ça ne le fait pas. Regardez mon exemple de code complet ici: Paste.ly/5wrj .
@Peter, je suis désolé, mais votre pâte.ly lien est en panne. Souhaitez-vous séduire votre échantillon à un autre service comme gist.github.com ? J'aimerais voir l'exemple, comme je suis intéressé par la même question.
@Overbryd Vous non sûr, si cela est de 1000 ans trop tard, mais: gist.github.com/2783772
Hey, c'est génial! @Peter Avez-vous un aperçu de la manière dont cette solution échoue avec plusieurs utilisateurs?
@Andrew - Malheureusement, je ne connais pas de détails sur la mise à l'échelle. Revenez dans une fois que vous avez fait! :)
@Peter - J'ai posté comme réponse ci-dessous pour que je ne sois pas obstruer ce fil de commentaire.
Lire Ruby 2.1 Documentation, je pense que la réponse ici est obsolète ou fausse; voir ma réponse ci-dessous
@peter p>
J'ai fait des recherches sur la manière de faire échec une solution IDLE IMAP. Je pense maintenant essentiellement à 2 options. P>
Option 1: Exécutez un démon qui vérifie le courrier pour tous les comptes sur une boucle continue. P>
Option 2: Ouvrez une connexion inactive pour chaque compte et recevoir des mises à jour. P>
Étant donné que mon application s'occupe de plusieurs (peut-être des milliers de milliers de comptes), l'option 2 semble une impossibilité. Je pense que mon meilleur pari est d'aller avec l'option une, puis de casser le serveur en plusieurs travailleurs après avoir frappé une sorte de maximum. p>
Le code de base / idée est décrit ici http://railpikes.com/ 2007/6/1 / rails-traitement par courrier électronique p>
Je travaille sur le fait de faire du ralenti avec Gmail sur une application Rails depuis un moment maintenant, je fais quelque chose de très semblable à: Gist.Github.com/jem/2783772 - Cependant, il provoque toutes sortes de problèmes lorsque les travailleurs redémarrent, etc. Les choses commencent à devenir assez hectiques avec tous les threads. Depuis votre réponse, avez-vous eu de la chance de faire du ralenti à travailler avec beaucoup d'utilisateurs? Des conseils, des astuces ou des suggestions?
avec Ruby 2.x: La solution est décrite par le morceau de code de Mzolin ici: https://stackoverflow.com/a/21345164/1786393 p>
Je viens d'écrire un script complet (mais toujours brouillon) pour chercher des mails invisibles ici https://gist.github.com/solyaris/b993283667f15effa579 P>
BTW, commentaires Bienvenue. P>
Essayé cela avec Ruby 1.8.6 et cela fonctionnait parfaitement.