Создание службы отправителя электронной почты - PullRequest
5 голосов
/ 28 марта 2011

У меня есть пара веб-приложений, которые все используют отправку электронных писем, будь то с помощью контактной формы, каких-либо уведомлений и т. Д.

Проблема, которую я обнаружил, заключается в том, что на самом деле нет никакого способадля отслеживания сообщений электронной почты, отправляемых из веб-приложений, поэтому я придумала возможное решение:

Figure1. Flow Diagram of Email Sender Service

Это довольно просто на самом деле - вместо того, чтобы иметь каждый вебПриложение, отправляющее электронные письма, я бы хотел унифицировать, создав центральную службу отправителей электронной почты.

В основных терминах каждое приложение просто создает строку в таблице «Исходящие электронные письма» в базе данных с данными «Кому», «От», «Тема», «Содержимое».

Служба отправителя электронной почты (служба Win)) затем выберет электронные письма из папки «Исходящие», отправит их, а затем пометит как отправленные.


Несмотря на то, что я буду хранить информацию «основной электронной почты» (в, теме, содержимом) в базе данных,что я действительно хотел бы сделать, так это сохранить сам объект «MailMessage», чтобы служба отправителя электронной почты могла десериализовать исходный MailMessage, поскольку это позволило бы любому приложению полностью настроить электронную почту.

Есть ли какие-либо проблемы с использованием объекта MailMessage таким образом?

Обновление: Еще одна цель - сохранить журнал отправленных электронных писем - отсюда и причина использования базы данных.

Ответы [ 2 ]

6 голосов
/ 28 марта 2011

Гораздо лучшая архитектура состоит в том, чтобы приложения вызывали какой-то общедоступный интерфейс службы отправки электронной почты. Затем сама служба может быть ответственна за запись отправки в базу данных.

Эта архитектура означает, что база данных становится внутренней для службы и, следовательно, уменьшает связь между вашими приложениями (каждое приложение знает об относительно небольшом публичном контракте, а не о схеме базы данных). Это также означает, что если вы обнаружите некоторую проблему с хранением объектов MailMessage в базе данных, вы можете изменить метод хранения без обновления всех ваших клиентов.

3 голосов
/ 28 марта 2011

Зачем использовать базу данных?Просто попросите приложения вызвать вашу службу электронной почты напрямую, предоставив всю информацию.

Если вы хотите поставить в очередь посылки, вы можете использовать привязку net.msmq с WCF, которая будет хранить запросы внадежная очередь, из которой служба будет читать.Все это будет сделано для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...