2009-02-17 24 views
9

Estamos escribiendo una función para enviar un recordatorio por correo electrónico a los clientes en x días y nos preguntamos si era posible retrasar el envío de correos electrónicos de manera similar a como lo hace en Outlook (Nuevo Correo> botón Opciones> No entregar antes) en C#.Retrasando el envío de correos electrónicos en C#

¿Alguien sabe de una manera de hacer esto?

Respuesta

3

Una posibilidad es crear un servicio que se ejecute en una tarea programada para procesar el correo 'pendiente'. Puede almacenar el correo pendiente en una base de datos SQL. (Dave Detalles Este)

En este artículo se ve prometedor si se desea evitar un servicio 'real'

http://www.codeproject.com/KB/aspnet/ASPNETService.aspx

+0

Decidí seguir el método detallado en el enlace de arriba y parece que funciona bien. Gracias –

+0

De nada Chris – ccook

1

El SmtpClient es un cliente bastante tonto y no admite esto: los envíos son inmediatos, ya sean síncronos o asíncronos. Es posible que pueda hacerlo utilizando una integración de Exchange. Sin embargo, no estoy seguro de qué API están expuestas para Exchange. La forma más simple sería mantener el mensaje en una tabla de base de datos junto con el tiempo de envío y tener un proceso fuera de línea que escanea regularmente esta tabla y busca mensajes cuyo valor de tiempo de envío ha pasado y no están marcados como enviado

+0

Las grandes mentes de Hehehe piensan igual :) –

+0

Puede en EWS 2.0 lo que me hace preguntarme si hay un encabezado especial que puede configurar para hacer lo mismo a través de SMTP a un servidor de Exchange: http://msdn.microsoft.com/en -us/library/office/jj220496 (v = exchg.80) .aspx – kamranicus

9

Si desea enviar el correo electrónico a un servidor SMTP para mantenerlo durante varios días, el servidor debería admitir esta función. Sin embargo, recomendaría no hacerlo de esa manera. Si tiene un problema con los correos electrónicos faltantes, puede ser difícil localizarlos.

Esto es lo que yo haría:

  1. la Lista de las correos electrónicos en su sistema haciendo una entrada de la tabla.
  2. incluir una columna "SendDate" en la tabla donde se puede establecer una fecha en el futuro
  3. Escribir un servicio de Windows que se despierta una vez cada 15 minutos (por ejemplo) y envía los mensajes de correo electrónico de esa tabla, donde SendDate < currentDate
+0

Esto es exactamente lo que hacemos para nuestro sitio web de soporte, para notificar a los clientes cuando se modifica un incidente que han informado. La única diferencia es que utilizamos un trabajo de SQL Server para enviar el correo en lugar de un servicio. – Carl

+0

Yo también hago esto. Es mucho más rápido insertar un correo electrónico en una tabla de base de datos y también puede mantener un registro de los correos electrónicos enviados. – GateKiller

3

La manera de lograr esto sería para que su solicitud escriba el correo electrónico en una cola (podría ser una base de datos, archivo, MSMQ, etc.) y luego escriba un proceso separado que, en una fecha posterior, lea el correo de esa cola y lo envíe.

Hasta donde yo sé, el protocolo SMTP no tiene ningún tipo de característica de "envío retrasado". Además, la característica a la que hace referencia en Outlook solo la conserva en la bandeja de salida de su cliente hasta la fecha designada, por lo que es una característica del lado del cliente, no una función del lado del servidor.

Cuestiones relacionadas