9
votes

Meilleures pratiques pour recevoir des courriels dans des rails

J'essaie de comprendre le meilleur moyen de gérer le courrier électronique entrant dans une application Rails. Je réalise que "les meilleures pratiques" est assez subjective, alors je vais commencer par dire que mes principales préoccupations sont l'évolutivité et l'efficacité. C'est une question principalement parce que mon utilisation impliquera de manipuler des pièces jointes potentiellement importantes.

semble juste hier la méthode acceptée consistait à utiliser ActionMailer pour recevoir le courrier électronique, mais récemment, je suis tombé sur plusieurs articles en disant que cela est inefficace car il espère une nouvelle instance de rails avec chaque courrier électronique (horrible à des volumes élevés). < / p>

Plus récemment, cet article a attiré mon attention: http://jasononifer.com/2009/04/24/Receving-Email -with-rails

La poste parle d'une version compliquée du système ActionMailer qui n'est pas forcée d'augmenter une instance complète des rails, mais les commentaires parlent de plusieurs autres options telles qu'un répertoire de courrier dédié (Maildir?) et la récupération IMAP / POP.

Ma question est la suivante: Quelqu'un a-t-il des idées sur ce que la meilleure option serait actuellement pour le traitement d'un courrier électronique entrant dans une application Rails (y compris les pièces jointes)?


0 commentaires

5 Réponses :


6
votes

Je maintiens le fetcher Plugin pour télécharger le courrier électronique à partir d'un serveur IMAP que j'utilise avec cron. J'avais l'habitude d'utiliser un démon mais qui était difficile à continuer à courir (même avec Monit) parce que Ruby se traînerait. Cron est ok pour ma charge de travail, mais elle apparaît un processus de rails une fois par minute.

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

L'autre approche que j'ai recommandée est de déclencher un poste http pour chaque message reçu. Ensuite, vous pouvez accabler votre niveau Web pour le gérer.

Plug Shameless: Vous voudrez peut-être consulter Mike Mondragon et mon livre PeepCode Lors de la réception d'e-mail avec Ruby .


4 commentaires

Les bouchons vergognes ne sont pas des vergognes 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 d'hébergez votre propre serveur de messagerie et tirez-vous de cela? Merci!


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


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


Toute idée sur la manière de traiter plusieurs pièces jointes avec MMS2R. travaillé sur une solution MMS2R => PaperClip pendant un moment maintenant. Il fonctionne avec défaut_media, mais pas avec le support ['image / jpeg'] .....



1
votes

dans mms2r the mms2r # défaut_media vient de retourner la plus grande pièce jointe vidéo s'il existe ou la plus grande pièce jointe de l'image s'il existe, ou la plus grande pièce jointe du texte s'il existe dans cet ordre. MMS2R # Default_Text Retourne le plus grand texte / pièce simple s'il existe. Vous pouvez également accéder aux pièces jointes directement via les médias de MMS2R, par exemple. MMS2R # Media. MMS2R # Media est clé par MIMETYPE, la valeur référencée par la clé est une gamme de supports de ce type. Donc, s'il y avait deux attaches JPEG dans un courrier électronique traitée par MMS2R, vous leur accéderiez comme une matrice en saisissant le hachage multimédia avec image / JPEG, par ex. MMS2R # Media ['Image / JPEG']

Lorsque MMS2R procède d'abord un e-mail, toute pièce jointe qu'il trouve est décodée et stockée dans une gamme de supports de ce type. Comme je l'ai dit, ce tableau est ensuite saisi par MimeType dans le support MMS2R # MMS2R HASH.

Achetez le livre, je dois payer mon hypothèque Réservez sur la réception de courrier électronique avec Ruby .


0 commentaires

4
votes

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


1 commentaires

Je n'ai pas encore essayé celui-ci, mais je vais vérifier la prochaine fois que je fais face à cette question. J'ai travaillé avec SendGrid.com et je peux les recommander à tous ceux qui ont besoin d'un tel service ... Je voulais juste faire du tuyau pour les futurs lecteurs!



0
votes

J'ai récemment écrit un démon qui reçoit le courrier de Postfix à l'aide de LMTP (il utilise EventMachine et est assez rapide et robuste) et l'enregistre à MongoDB. Dans ce sens, il élimine l'homme du milieu (client IMAP Server + IMAP). Cette approche donne une évolutivité et une redondance sans limites. L'assistance d'autres brajouts (MySQL, Redis, etc.) peut être ajouté dans pratiquement pas de temps.

reçu


0 commentaires

3
votes

Pour relais le courrier électronique 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 avons également exploité la capacité du postfix à différer le courrier électronique s'il ne peut pas être relayé. Je n'ai pas vu cela ailleurs jusqu'à présent. Voir http://www.doorkeeperhq.com/developer/smtp-to-web- API pour plus de détails.


0 commentaires