rails ruby-on-rails heroku sendgrid

ruby on rails - Mejores prácticas para enviar correos electrónicos a muchos destinatarios(Rails+SendGrid)



rails mailer (6)

500 mensajes realmente no es mucho para SendGrid. Ni siquiera es un problema en su radar. Trabajé para una empresa que enviaba 2.7 millones de correos electrónicos en un solo mes, y aun así solo es un problema.

Con las capacidades de la API de SendGrid, no estaría enviando 500 correos electrónicos, sino que enviaría un correo electrónico que tiene un conjunto de encabezado específico de la API de SendGrid. ¿Por qué? Porque, ¿alguna vez ha intentado enviar 500 mensajes de correo electrónico individuales y ha cronometrado cuánto tiempo lleva? ¿Qué tal un solo correo electrónico ? El único email será más rápido.

La API de SendGrid tiene un ejemplo de Ruby que está aquí: https://sendgrid.com/docs/Integrate/Code_Examples/SMTP_API_Header_Examples/ruby.html .

Eso es bastante largo y desordenado, así que déjame simplificarlo para ti. Básicamente, configuras esto en tu correo electrónico:

headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json

SendGrid luego analizará esto y luego enviará el correo electrónico que le envió a esa variedad de destinatarios. Me parece recordar que te piden que limites esto a aproximadamente 1000 destinatarios por correo electrónico, por lo que sería conveniente dividirlo en varios correos electrónicos si lo quisieras. En ese momento, traería algo como el trabajo delayed_job o resque gemas de resque para resolverlo.

Ah, y por cierto, todavía deberá especificar una dirección para este correo electrónico solo para hacer que la gema del correo sea feliz. Teníamos [email protected] para eso.

La API de SendGrid también admitirá filtros en sus correos electrónicos, por lo que puede tener cadenas de marcador de posición como {{ firstname }} y, suponiendo que lo envíe con el encabezado SMTPAPI, hará la "combinación de correspondencia" en el correo electrónico y las personalizará .

Le haría mucho bien si lee la documentación de la API de SendGrid. Es realmente útil y lo que proporcionan es super poderoso.

Enviaré correos electrónicos masivos desde una aplicación de Rails y planeo usar SendGrid. Supongo que es mejor enviar un correo electrónico separado a cada destinatario (en lugar de usar BCC para todos los destinatarios). Si eso es cierto, ¿debería usar algo como DelayedJob para poner en cola los mensajes que se envían a SendGrid o sería seguro lanzar 500 mensajes a la vez? ¡Gracias!


Así lo he hecho en Rails 4.

class NewsMailer < ApplicationMailer include SendGrid sendgrid_category :use_subject_lines default from: ''My App! <[email protected]>'' def mass_mailer(news) # Pass it in template @news = news # Custom method to get me an array of emails [''[email protected]'', ''[email protected]'',...] array_of_emails = @news.recipients.pluck(:email) # You can still use # headers["X-SMTPAPI"] = { :to => array_of_emails }.to_json sendgrid_recipients array_of_emails mail to: ''[email protected]'', subject: ''Weekly news'' end end


Delayed Job y SendGrid suenan como la mejor opción de lo que dices, pero ¿has considerado usar uno de los anuncios publicitarios de la campaña como Mailchimp? Si está enviando una gran cantidad de correos que son básicamente iguales, le permitirán configurar y crear una plantilla de campaña y luego disparar un CSV de todas las variables. Entonces efectivamente se fusionan y despiden a todos.

Sin embargo, si solo estás hablando unos pocos cientos, estás en las líneas correctas. SendGrid puede manejar fácilmente la carga, y usted desea usar el Trabajo demorado para que no se vea afectado por el rendimiento de la API de SendGrid en caso de que no sea favorable. Alternativamente, busque Resque para enviar correo, ya que puede ser más eficiente.


Me imagino que SendGrid puede manejar ese tipo de carga. La mayoría de los sistemas de relé pueden. También me imagino que si enviaras los 500 en una llamada de la API CC, su sistema los analizaría y los enviaría individualmente. Uso Elastic Email ( http://elasticemail.com ), y sé que así es como lo manejan y funciona muy bien.


Recomiendo usar la gema sendgrid ( https://github.com/stephenb/sendgrid ) ya que simplifica su código de llamada.

Aquí hay un ejemplo de un anuncio de acción de Rails 3:

class UserAnnouncementMailer < ActionMailer::Base include SendGrid default reply_to: "[email protected]", return_path: "[email protected]", from: "Test" # bulk emailer # params - opts a hash of # emails: array of emails # def notice(opts={}) raise "email is nil" unless opts[:emails] sendgrid_category :use_subject_lines sendgrid_recipients opts[:emails] name = "The Man" to = "[email protected]" from_name = "#{name} <[email protected]>" subject = "Important" mail({from: from_name, to: to, subject: subject}) end end

Y el correspondiente código de llamada. Se recomienda tener la matriz de correos electrónicos para que sean <1000 correos electrónicos.

emails = ["[email protected]", "[email protected]"] UserAnnouncementMailer.notice({:emails => emails}).deliver

Consulte el archivo readme github de gem de Sendgrid para obtener más detalles.


SendGrid ofrece algunos consejos here . Tienen una categoría de capacidad de entrega y mejores prácticas en su blog.