¿Cómo enviamos 5000 correos electrónicos por hora usando Actionmailer en Ruby on Rails?

Tengo algunas preguntas sobre ActionMailer:

  1. ¿Cómo se conecta Actionmailer a un servidor smtp?

  2. ¿Son las conexiones concurrentes o paralelas si el número de correos electrónicos es alto> 1000?

  3. ¿Cómo afectará a Ruby on Rails la aplicación de Ruby on Rails y cómo lo manejaría Actionmailer?

  4. ¿Alguna otra solución / complemento para enviar un gran número de correos electrónicos desde una aplicación RoR aparte de ActionMailer?

————————————————adicional :

Necesitamos enviar al menos 1000 correos electrónicos por 15 minutos. Estamos utilizando un servidor Notes Domino como nuestro servidor smtp. ¿Cuál es la architecture posible para este tipo de problema? Ya estamos almacenando los correos electrónicos en la base de datos para enviarlos más tarde, ¡pero lo que se necesita es el enfoque de envío !

Lo habitual es crear un trabajo de fondo para enviar un correo electrónico. ActionMailer es muy bueno para correos electrónicos individuales, pero tiende a tener problemas después de enviar múltiples correos electrónicos, ya que cada uno puede tardar varios segundos en completarse. Es por eso que creé PostageApp para ayudar a resolver esos problemas.

Algunos servicios en el mercado para ayudarlo con el envío de muchos correos electrónicos de Rails:

  • MailGun
  • SendGrid
  • PostmarkApp
  • MailChimp
  • Mailjet
  • PostageApp

Todos estos tienen formas de enviar múltiples mensajes con una sola llamada de API o transacción SMTP.

1) Actionmailer se conecta a su servidor smtp a través de un conjunto de parámetros que incluyen un host, puerto y protocolo.

3) El efecto será un sitio lento como resultado de las muchas tareas síncronas que se ejecutan.

2 y 4)

Actionmailer es un poco demasiado lento para enviar una tonelada de correos electrónicos bajo carga, recuerde que es una operación sincrónica y, como tal, no es realmente el tipo de cosa que quiere hacer mucho en un sitio ocupado.

Para ser honesto, es mejor que no envíe esa cantidad de correo electrónico desde su sitio web. No está realmente diseñado para ser utilizado de esa manera. Si tuviera que enviar ese tipo de volumen, vería hacer el trabajo en segundo plano, algo así como Delayed Job (Trabajo demorado) funcionaría bien aquí o uno de los muchos anuncios de correo de Rails asíncronos que se encuentran aquí sería suficiente.

Lo que realmente desea ver aquí es el requisito que está tratando de cumplir, ¿es absolutamente necesario que el sitio web sea responsable de enviar el correo de manera sincrónica? En la mayoría de los casos, la respuesta a esa pregunta es no. Si puede, será mucho mejor que aplace este tipo de tareas a otra parte de su sistema, mantenga su sitio lo más ágil y enfocado posible.

Solución simple aquí para ti … Sidekiq o Resque

Recomiendo encarecidamente Sidekiq, ya que no es tan intenso como el servidor para ejecutar varios trabajadores para este – solo tenga cuidado con los problemas de concurrencia (asegúrese de que no haya 2 trabajadores que seleccionen el mismo trabajo y envíen correos electrónicos duplicados).

Supongamos que configura a 20 trabajadores de Sidekiq, cada uno debería poder enviar un correo electrónico cada 2-4 segundos, y está mirando a un fácil 300-600 por minuto.

NO intente hacer esto sin trabajadores de fondo como Sidekiq, Resque o DelayedJob. Congelará toda la aplicación si intenta enviarla con una gran cantidad de correos electrónicos. Incluso el envío de correos electrónicos de activación en la aplicación y lo que no le causará problemas innecesarios.

Tendría un Worker que maneja la cola periódicamente y otra clase Worker que maneja el envío. Estamos utilizando Resque (¿6 trabajadores quizás?) Para esto en una aplicación más antigua (pre-sidekiq) para enviar alrededor de 500 correos electrónicos cada 5 minutos sin problemas.

Siempre puede utilizar un tercero como alguien mencionado. Sendgrid es decente. Pero esa no era la pregunta, así es como lo haces tú mismo de manera simple y fácil.

  1. Usted define la configuración SMTP en un archivo de configuración si se deja en blanco, usa sendMail local

  2. concurrente

  3. manejadores múltiples

  4. ¿Hay un complemento de correo electrónico masivo para aplicaciones Rails?

también puede hacer 1000.times do email.deliver pero probablemente colapsará su servidor