2009-08-16 10 views
9

J'ai essayé de trouver la meilleure façon de gérer le courrier entrant dans les applications ferroviaires. Je réalise que les «meilleures pratiques» sont assez subjectives, donc je commencerai par dire que mes principales préoccupations sont l'évolutivité et l'efficacité. C'est un problème principalement parce que mon utilisation impliquera la manipulation de pièces jointes potentiellement volumineuses. On dirait que la méthode acceptée était d'utiliser ActionMailer pour recevoir l'e-mail, mais récemment, j'ai découvert plusieurs articles disant que c'est inefficace car cela engendre une nouvelle instance de rails avec chaque email (horrible à haut volume).Meilleures pratiques pour recevoir des e-mails dans les rails

Plus récemment, cet article a été faire mon attention: http://jasonseifer.com/2009/04/24/receving-email-with-rails

Les négociations post sur une version allégée du système ActionMailer qui n'est pas obligé de frayer une instance entière des rails, mais les commentaires parlent plusieurs autres options comme un répertoire mail dédié (maildir?) et une récupération imap/pop.

Ma question est la suivante: Quelqu'un at-il des idées sur la meilleure option pour traiter le courrier entrant dans une application de rails (y compris les pièces jointes)?

Répondre

6

Je gère le Fetcher plugin pour le téléchargement d'e-mails à partir d'un serveur IMAP que j'utilise avec cron. J'avais l'habitude d'utiliser un démon, mais c'était dur de continuer à fonctionner (même avec monit) parce que Ruby serait accroché. Cron est OK pour ma charge de travail mais il génère un processus Rails une fois par minute.

Pour le traitement des pièces jointes, consultez la bibliothèque MMS2R. Il a une belle interface pour récupérer les fichiers d'un email.

L'autre approche que je me suis recommandée est de déclencher un message HTTP pour chaque message reçu. Ensuite, vous pouvez adapter votre niveau Web pour le gérer.

Plug sans vergogne: vous voudrez peut-être vérifier Mike Mondragon et mon PeepCode book on receiving email with Ruby.

+1

Les prises éhontées ne sont pas éhontées si elles sont pertinentes ;-), je vais vérifier. En ce qui concerne l'option IMAP, comment cela fonctionne-t-il exactement? Avez-vous besoin d'avoir accès à un compte de messagerie externe ailleurs, ou hébergez-vous votre propre serveur de messagerie et en tirer tout ce que vous voulez? Merci! – Ryan

+0

J'utilise un compte de messagerie Google Apps. Tout compte avec un accès IMAP devrait fonctionner, cependant. –

+1

Pour mon cas particulier, je vais utiliser http post juste parce que ma situation n'est pas propice à l'accès IMAP (email pour un domaine entier). Merci pour la réponse, et merci de m'avoir envoyé à MMS2R! – Ryan

1

MMS2R#default_media renvoie simplement la plus grande pièce jointe vidéo si elle existe, ou la plus grande pièce jointe si elle existe, ou la plus grande pièce jointe si elle existe, dans cet ordre. MMS2R#default_text renvoie la plus grande pièce jointe texte/pièce brute si elle existe. Vous pouvez également accéder à l'une des pièces jointes directement via le hachage des médias de mms2r, par ex. MMS2R # media. MMS2R#media est saisi par mimetype, cette valeur référencée par la clé est un tableau de médias de ce type. Ainsi, s'il y avait deux pièces jointes jpeg dans un e-mail traité par MMS2R, vous y accèderiez en tant que tableau en tapant le hash média avec image/jpeg, par ex. Lorsque MMS2R commence par traiter un courrier électronique, toute pièce jointe qu'il trouve est décodée et stockée dans un ensemble de médias de ce type MMS2R#media['image/jpeg']

Comme je l'ai dit, ce tableau est ensuite saisi par mime dans le hachage MMS2R#media.

Acheter le livre, j'ai besoin de payer mon hypothèque PeepCode book on receiving email with Ruby.

4

Vous pouvez essayer d'utiliser un service comme http://cloudmailin.com/

+0

Je n'ai pas encore essayé celui-ci, mais je vais le vérifier la prochaine fois que je rencontrerai ce problème. J'ai travaillé avec sendgrid.com, et je peux les recommander à tous ceux qui ont besoin d'un tel service ... Je voulais juste faire pipi pour les futurs lecteurs! – Ryan

0

je l'ai écrit récemment un démon qui reçoit le courrier de Postfix utilisant LMTP (il utilise eventmachine et est assez rapide et robuste) et à MongoDB sauve. En ce sens, il supprime l'intermédiaire (serveur IMAP + client IMAP). Cette approche offre une extensibilité et une redondance à peu près illimitées. D'autres supports (MySQL, Redis, etc.) peuvent être ajoutés en un rien de temps.

received

2

Pour relayer email de Postfix à votre application Rails via HTTP, je viens d'écrire un article sur la façon dont nous le faisons.

C'est en fait assez simple, mais nous profitons également de la capacité de Postfix à différer le courrier électronique s'il ne peut pas être relayé. Je n'ai pas vu ça ailleurs jusqu'ici. Voir http://www.doorkeeperhq.com/developer/smtp-to-web-api pour plus de détails.

Questions connexes