¿Qué debo saber sobre el envío de mensajes de correo electrónico en un subproceso en segundo plano? ASP.NET

StackOverflow https://stackoverflow.com/questions/2106474

Pregunta

Tengo un hilo conductor en el fondo que se va a dormir y los datos de extracción de la base de datos cuando algo la despierta. Estoy enviando los mensajes de correo electrónico que utilizan aplicaciones de Google utilizando SmtpClient (código de abajo).

Yo quería saber si hay algo que tener en cuenta? Tengo la intención de enviar un único correo electrónico a la vez (un registro o de correo electrónico contraseña Olvidó). Estoy un poco preocupado algo puede suceder como un bloqueo email no es válida porque el hilo i no efectuar una modificación o tal vez Google Apps pasar a ser hecho y haciendo que la aplicación para hacer estallar. ¿Qué debo tener en cuenta fuera? Debería preguntar cómo yo debería probar así?

        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential(fromAddr, pass),
            EnableSsl = true
        };
        MailMessage mail = new MailMessage(fromAddr, toAddr, subject, body);
        mail.IsBodyHtml = true;
        client.Send(mail);
¿Fue útil?

Solución

Si está utilizando IIS. Instalar el servidor SMTP en una enviar todo el correo al host local. De esta forma si un correo electrónico no va a través de inmediato, el servidor SMTP en cola el correo electrónico en lugar de colgar su aplicación.

Usted tendrá que configurar el servidor SMTP para utilizar Gmail como un host inteligente. Si necesita más información acerca de cómo configurar esto, que me haga saber.

Otros consejos

Añadir un try / catch para el código, y que está bien. Será, en el peor, el tiempo de espera con el tiempo. No se ejecutará siempre, y Google no va a mantener la conexión abierta para siempre (de hecho SMTP es bastante implacable cuando se trata de tiempos de espera ... si usted es lento, que matará a la conexión).

    try
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential(fromAddr, pass),
            EnableSsl = true
        };
        MailMessage mail = new MailMessage(fromAddr, toAddr, subject, body);
        mail.IsBodyHtml = true;
        client.Send(mail);
    }
    catch
    {
        // do something
    }

Cuando se trata de pruebas ... usar una cuenta de Gmail diferente. También es posible que desee comprobar en su límite de correos electrónicos enviados por día. No está seguro de qué número de Gmail es pero no solamente te permite enviar muchos cómo cada vez que desea enviar.

Estoy asumiendo que esto se está haciendo bajo ASP.Net, ya que es una de las etiquetas.

¿Qué tan importante es este proceso? Esto puede ser un candidato bueno para un servicio de Windows en lugar de parte del tiempo de ejecución ASP.Net si su entorno lo permite.

Usted ha mencionado que usted tira de los datos de la base de datos y envía el correo electrónico. Nada de esto se basa en ASP.Net. Además de un servicio que puede dar una mejor roscado, prueba, extracción de madera y asincrónicos opciones.

Si desea seguir con ASP.Net tiempo de ejecución, entonces usted puede también considerar asincrónicos Páginas si no lo ha hecho. Esto le permitirá generar varios hilos de correo y tener su espera la página principal del hilo de los resultados. También puede establecer un valor de tiempo de espera que le permitirá cancelar la sesión y los hilos atascados. Configuración y gastos de un tiempo de espera asincrónico se haría cargo de la mayor parte de sus preocupaciones sospecho. Esta solución, al menos, llevar a su correo de envío fuera de su maquillaje solicitud de página hilo.

La prueba debe ser sencillo. Puede registrar cuentas de Google independientes para la prueba.

Se puede configurar la propiedad de Timeout SmtpClient y, a continuación, manejar excepciones emitidas por el llamado Send. Entonces no va a bloquear el hilo, aunque se tenga que manejar la causa de la excepción según considere oportuno.

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