2011-05-05 11 views
7

Creé un sitio web para un cliente y les gustaría una herramienta de boletín personalizado. Crear la herramienta fue fácil, pero no estoy seguro de cómo enviar el correo electrónico.¿Cómo se envían correos masivos desde ASP.NET?

Configuré una página de prueba y logré enviarme un correo electrónico de prueba utilizando el espacio de nombres System.Net.Mail. Intenté aplicar este código a un bucle en la página del boletín, pero se está convirtiendo en una tarea bastante difícil. El ciclo de envío de correo electrónico bloquea todo el sitio durante aproximadamente una hora mientras envía sus correos electrónicos. Algunas veces abortará el ciclo a mitad de camino y algunos de los correos electrónicos no serán enviados.

Intenté iniciar el ciclo en otro hilo.

protected void btnSendNewsletter_Click(object sender, EventArgs e) 
{ 
    Thread t = new System.Threading.Thread(new ThreadStart(SendEmails)); 
    t.Start(); 
} 

pero esto todavía hace que el sitio vaya lento y también tiene la costumbre de abortar en el medio. ¿Cuál es el método común para enviar correos electrónicos masivos? Estoy seguro de que no lo estoy haciendo bien.

Soy muy nuevo en el campo del correo electrónico en .NET por lo que cualquier ayuda es muy apreciada.

+5

Utilice un servicio, no una página asp.net para enviar correos electrónicos –

+0

qué MailServer está utilizando? –

+0

Algo relevante: http://stackoverflow.com/questions/3905734/how-to-send-100-000-emails-weekly/3905805#3905805 – Piskvor

Respuesta

6

Para este tipo de tarea es mejor agregar un montón de trabajos a una cola. Luego, ejecute un subproceso que extraiga x número de trabajos de la cola, los procese (es decir, envíe los correos electrónicos) y luego duerma durante un período de tiempo. Esto le dará a la aplicación web algo de espacio para respirar.

Si está utilizando una base de datos, puede crear una tabla de cola de correo electrónico para almacenar los trabajos. Prefiero usar este tipo de almacenamiento en lugar de la memoria en caso de que la aplicación se recicle por algún motivo o se produzca una excepción ... al menos puede retomar desde donde lo dejó.

En general, el proceso que ejecuta el subproceso de trabajador no sería la aplicación web en sí. Sería un servicio de Windows o algo similar. Esto podría no ser posible si tienes un alojamiento compartido.

+0

Muy informativo y sucinto. Gracias. ¿Conoces alguna API de terceros con la que te puedes suscribir para descargar la carga y dejar que envíen los correos electrónicos? – Chev

+0

De acuerdo. Si bien no será posible para Chevex crear un servicio (alojamiento compartido), este método que especificó seguirá funcionando en el sistema principal. – IAmTimCorey

+0

Estoy pensando que la opción más barata sería dejar que un tercero maneje la carga del correo electrónico. Parece que no puedo encontrar una buena API de correo masivo. ¿Hay uno popular que usa la mayoría de la gente? – Chev

Cuestiones relacionadas