Pregunta

Estoy pensando en cómo manejar el envío de grandes cantidades de correo electrónico desde mis aplicaciones web, y si existen las mejores prácticas para hacerlo. StackOverflow ya lo está etiquetando como 'subjetivo', lo que puede ser hasta cierto punto, pero necesito saber la manera más exitosa de implementar este sistema, o si existe algún enfoque estandarizado.

En mi aplicación web, hay usuarios que son jefes de grupos de 1 a 10,000 usuarios. Este usuario debe poder enviar un mensaje de correo electrónico a todos estos usuarios a través de mi sistema. Por lo tanto, mi sistema es responsable de enviar hasta 10,000 correos electrónicos a usuarios individuales para cada jefe de grupo.

Por lo que puedo decir, no hay límite de velocidad en GMail para enviar mensajes a personas (aunque hay un máximo de 500 destinatarios).

En este momento, mi configuración actual es:

  • Cuando se envía un mensaje a través del sistema, ingresa en una cola de correo electrónico.
  • Un script cron captura mensajes de la cola cada pocos minutos y envía esos correos electrónicos.
  • Todo el correo electrónico se lleva a cabo a través del servidor SMTP de GMail.
  • La aplicación real que realiza el envío de correo es PHPMailer.

Esta configuración, a medida que la base de usuarios crece, probablemente no será suficiente. Las preguntas que tengo son:

  1. ¿Debería estar usando un servidor SMTP local?
  2. ¿Debería usar un binario de correo en la máquina local? En este caso, probablemente podría saltarme la cola por completo?
  3. ¿Hay una forma aceptada de hacer esto?

¡Gracias!

¿Fue útil?

Solución

Con un recuento de correo electrónico como " alto " Como 10.000 por día, no confiaría en GMail (o en cualquier otro) SMTP. No es que no puedan manejarlo, obviamente pueden manejar MUCHO más. Pero posiblemente no quieran.

Tener un servidor SMTP local es IMO el camino a seguir:

  • Es bastante fácil de configurar (simplemente NO dejes que la gente lo use sin un esquema auténtico y sólido)
  • La mayoría del MTA maneja muy bien las colas de envío
  • No tendrá que lidiar con GMail (u otros) que decidan bloquear su cuenta algún día por razones de cuota

Otros consejos

Google App Engine

Escribiría esto en el motor de aplicaciones de Google (python) porque:

  • Se escala bien.
  • Tiene una buena API de correo electrónico.
  • Tiene una cola de tareas con una buena api para acceder.
  • Porque python es un lenguaje muy bonito.
  • Es (relativamente) barato.

PHP

Si lo implementara en PHP, lo haría

  • Encuentre un buen servidor SMTP que le permita enviar este volumen de correos porque Gmail no le permitirá enviar este tipo de volumen. Estoy seguro de que esto le costará algo de dinero.
  • Encuentre una biblioteca de correo electrónico PHP decente para enviar mensajes como, por ejemplo, PHPMailer, como usted dijo.
  • Use una cola de mensajes como, por ejemplo, beanstalkd para poner en cola los mensajes de correo electrónico y enviarlos de forma asíncrona. Primero porque con esto el usuario tendrá una carga de página más ágil. En segundo lugar, con una cola de mensajes como beanstalkd puede regular la velocidad de envío mejor, lo que evitará que su PC se sobrecargue de trabajo. Necesitará tener acceso ssh al servidor para compilar (instalar) beanstalkd. Puede encontrar beanstalkd en beanstalkd
  • También necesitaría acceso ssh para ejecutar un script PHP en segundo plano que procesará la cola de mensajes. Puede encontrar un beanstalkd-client en php beanstalkd-client

desde php / apache / página web

Esta es la página desde la que enviará mensajes al usuario. Desde esta página enviarás un mensaje a beanstalkd codificando algo en la línea de esto:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');
$message = ""; // This would contain your message
$pheanstalk->put(json_encode($message);

Tienes que poner los mensajes en la cola de mensajes usando el comando put

Desde el script PHP de larga ejecución en segundo plano:

El código se vería así:

// register Pheanstalk class loader
require_once('pheanstalk_init.php');
$pheanstalk = new Pheanstalk('127.0.0.1');

while(true) {
  $job =  $pheanstalk->reserve();
  $email = json_decode($job->getData());
  // Sent email using PHP mailer.
  $pheanstalk->delete($job);
}

Como digo, es posible tanto con PHP como con el motor de aplicaciones de Google, pero me gustaría utilizarlo porque es más fácil de implementar.

Gmail y Google Apps lo limitan a alrededor de 500 correos electrónicos al día. No estoy seguro de cómo se combina con el máximo de 500 destinatarios, pero si desea enviar 10 000 correos electrónicos, probablemente querrá encontrar otro servidor de correo. Personalmente uso un servidor local o el ISP o el SMTP del centro de datos.

Si está enviando tantos correos electrónicos, recomendaría usar la cola para que el usuario no se quede esperando a que se envíe el correo electrónico.

Tenga mucho cuidado de que su dominio no se incluya en la lista negra como dominio de spam. Si lo hace, puede esperar que la mayoría de sus correos electrónicos se bloqueen, soporte, ventas, etc. Lo que a su vez podría ser muy costoso.

En su lugar, puede querer usar un servicio como AWeber . No solo están configurados para manejar estas cantidades de correos electrónicos, sino que probablemente pueden proporcionarle más métricas de las que usted puede implementar por su cuenta.

No estoy seguro de que se publique en alguna parte, pero por experiencia puedo decirle que Gmail pondrá un congelamiento de quince minutos en su cuenta si comienza a enviar cientos de mensajes a la vez. Esto me pasó la semana pasada. Creo que deberías alojar tu propio servidor SMTP. El uso de la función de correo () a menudo colocará su correo en la carpeta de correo no deseado de alguien.

Simplemente instale Postfix en la máquina local, o una máquina en la misma LAN para velocidades de acceso máximas. Asegúrese de que esté bien asegurado desde el exterior y que se pueda acceder rápidamente desde el interior.

Luego codifique su script PHP para inyectar directamente los correos electrónicos a la cola de Postfix. Eso aumentará dramáticamente la velocidad de procesamiento de la entrega de correo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top