2009-08-16 9 views
9

He estado tratando de encontrar la mejor manera de manejar el correo electrónico entrante en las aplicaciones de rieles. Me doy cuenta de que las "mejores prácticas" son bastante subjetivas, así que comenzaré afirmando que mis principales preocupaciones son la escalabilidad y la eficiencia. Este es un problema principalmente porque mi uso implicará el manejo de archivos adjuntos potencialmente grandes.Mejores prácticas para recibir correos electrónicos en rieles

Parece que ayer el método aceptado fue utilizar ActionMailer para recibir el correo electrónico, pero recientemente me encontré con varios artículos diciendo que esto es ineficiente ya que genera una nueva instancia de rieles con cada correo electrónico (horrible en grandes volúmenes).

Más recientemente, este artículo ha sido conseguir mi atención: http://jasonseifer.com/2009/04/24/receving-email-with-rails

Los post habla de una versión reducida del sistema ActionMailer que no está obligado a generar toda una instancia rieles, pero los comentarios hablan de varias otras opciones como un directorio de correo dedicado (maildir?) y la recuperación imap/pop.

Mi pregunta es: ¿Alguien tiene alguna idea sobre cuál sería la mejor opción para procesar el correo electrónico entrante en una aplicación de rieles (incluidos los archivos adjuntos)?

Respuesta

6

Mantengo el Fetcher plugin para descargar el correo electrónico de un servidor IMAP que uso con cron. Solía ​​usar un daemon pero era difícil seguir corriendo (incluso con monit) porque Ruby se bloqueaba. Cron está bien para mi carga de trabajo, pero genera un proceso de Rails una vez por minuto.

Para procesar archivos adjuntos, consulte la biblioteca MMS2R. Tiene una interfaz agradable para obtener los archivos de un correo electrónico.

El otro enfoque que me han recomendado es disparar una publicación HTTP para cada mensaje recibido. Luego puede escalar su nivel web para manejarlo.

Conector Shameless: es posible que desee comprobar Mike Mondragon y mi PeepCode book on receiving email with Ruby.

+1

Los enchufes desvergonzados no son desvergonzados si son relevantes ;-), lo comprobaré. con respecto a la opción IMAP, ¿cómo funciona eso exactamente? ¿Necesita tener acceso a una cuenta de correo electrónico externa en otro lugar, o aloja su propio servidor de correo electrónico y simplemente saca de eso? ¡Gracias! – Ryan

+0

Uso una cuenta de correo electrónico de Google Apps. Sin embargo, cualquier cuenta con acceso IMAP debería funcionar. –

+1

Para mi caso particular, voy a usar http post simplemente porque mi situación no es propicia para el acceso IMAP (correo electrónico para un dominio completo). ¡Gracias por la respuesta y gracias por activarme en MMS2R! – Ryan

1

en mms2r el MMS2R#default_media simplemente devuelve el archivo adjunto de video más grande si existe, o el archivo adjunto de imagen más grande si existe, o el archivo adjunto de texto más grande, si existe, en ese orden. MMS2R#default_text devuelve el archivo adjunto texto/plano más grande si existe. También puede acceder a cualquiera de los archivos adjuntos directamente a través del hash de medios de mms2r, p. Medios MMS2R #. MMS2R#media está codificado por mimetype, ese valor al que hace referencia la clave es una matriz de medios de ese tipo. Por lo tanto, si hubiera dos archivos adjuntos jpeg en un correo electrónico procesado por MMS2R, accedería a ellos como una matriz al teclear el hash de medios con image/jpeg, p. Ej. MMS2R#media['image/jpeg']

Cuando MMS2R procesa primero un correo electrónico, cualquier archivo adjunto que encuentre se decodificará y almacenará en una matriz de medios de ese tipo. Como dije, esa matriz está codificada por mimetype en el hash MMS2R#media.

Comprar el libro, tengo que pagar mi hipoteca PeepCode book on receiving email with Ruby.

4

Usted podría tratar de usar un servicio como http://cloudmailin.com/

+0

No he probado este todavía, pero lo verificaré la próxima vez que enfrente este problema. He trabajado con sendgrid.com, y puedo recomendarlos a cualquier persona que necesite dicho servicio ... ¡solo quería conectarme para futuros lectores! – Ryan

0

Hace poco escribí un demonio que recibe el correo de Postfix usando LMTP (utiliza EventMachine y es bastante rápido y robusto) y lo guarda en MongoDB. En ese sentido, elimina al intermediario (servidor IMAP + cliente IMAP). Ese enfoque da una escalabilidad y redundancia bastante ilimitada. El soporte de otros backends (MySQL, Redis, etc.) se puede agregar en prácticamente ningún momento.

received

2

Para la retransmisión de correo de Postfix para su aplicación Rails a través de HTTP, que acabo de escribir un artículo sobre cómo lo estamos haciendo.

En realidad es bastante simple, pero también estamos aprovechando la capacidad de Postfix de diferir el correo electrónico si no se puede retransmitir. No he visto eso en otro lado hasta el momento. Vea http://www.doorkeeperhq.com/developer/smtp-to-web-api para más detalles.

Cuestiones relacionadas