2011-03-28 16 views
5

Tengo un par de aplicaciones web que utilizan todos los correos electrónicos que envían ya sea por el formulario de contacto, o algún tipo de notificación de cambios etc.La construcción de un servicio de correo electrónico del remitente

El problema que he encontrado es que no hay en realidad cualquier forma de rastrear los mensajes de correo electrónico que se envía desde las aplicaciones web, por lo que he llegado con una posible solución:

Figure1. Flow Diagram of Email Sender Service

es bastante simple en realidad - en lugar de tener cada aplicación web enviar el correos electrónicos me gustaría unificar el proceso mediante la creación de un servidor central de envío de correo electrónico hielo.

En términos básicos, cada aplicación simplemente crearía una fila en una tabla de 'Correos electrónicos salientes' en la base de datos con A, De, Asunto, datos de contenido.

El Servicio de remitente de correo electrónico (Servicio de Win) seleccionaría los correos electrónicos de la bandeja de salida, los enviará y luego marcará como se envió.


A pesar de que me gustaría almacenar información 'de correo electrónico básico' (a, desde, tema, contenido) en la base de datos, lo que realmente me gusta hacer es también almacenar el objeto 'MailMessage' misma manera que el correo electrónico El servicio del remitente podría deserializar el mensaje de correo original, ya que esto permitiría que cualquier aplicación personalice completamente el correo electrónico.

¿Hay algún problema con el uso del objeto MailMessage de esta manera?

Actualización: Otro objetivo, es almacenar un registro de los correos electrónicos que se han enviado, de ahí el motivo para usar una base de datos.

Respuesta

5

Una arquitectura mucho mejor es hacer que las aplicaciones llamen a algún tipo de interfaz pública en el servicio de envío de correo electrónico. El servicio en sí puede ser responsable de registrar el envío en una base de datos.

Esta arquitectura significa que la base de datos se convierte en interna para el servicio y reduce el acoplamiento entre sus aplicaciones (cada aplicación conoce un contrato público relativamente pequeño en lugar de un esquema de base de datos). También significa que si encuentra algún problema con el almacenamiento de objetos de MailMessage en la base de datos, puede cambiar el método de almacenamiento sin actualizar todos sus clientes.

+1

¡Me gusta esta idea en realidad! Podría tener un servicio WCF alojado para el remitente de correo electrónico, y las aplicaciones web podrían señalarlo y la WCF puede encargarse de poner el correo electrónico en la base de datos (para el registro) y de enviar el correo electrónico de inmediato. – Dal

3

¿Por qué utilizar la base de datos? Simplemente haga que las aplicaciones llamen directamente a su servicio de correo electrónico, proporcionando toda la información.

Si desea poner en cola los envíos, puede usar un enlace net.msmq con WCF, que almacenará las solicitudes en una cola confiable de la que el servicio leerá. Todo esto se haría por usted.

+0

Lo siento John, no dejé en claro que realmente quiero ver algún tipo de registro de todos los correos electrónicos que se han enviado. Sé que puede rastrear registros SMTP para esto si es necesario, pero me parece bastante engorroso en comparación con una tabla de base de datos. Creo que usar un WCF como lo mencionó es el camino a seguir :) – Dal

+0

@Dal: siga adelante y use una base de datos para iniciar sesión, pero usaría WCF directamente para enviar la solicitud al servicio. –

Cuestiones relacionadas