Решение для электронной почты для организации очередей, просмотра и перехвата писем? - PullRequest
0 голосов
/ 25 апреля 2011

У нас есть несколько проблем с электронной почтой, которые мы хотим решить.

  • Если SMTP-сервер не работает, мы бы хотели, чтобы наши пакетные задания помещали в очередь создаваемые им сообщения где-то , поэтому нам не нужно повторно запускать задания. Какова будет хорошая система очередей и как вы будете передавать сообщения из очереди на SMTP-сервер?
  • По умолчанию при отладке мы не хотим отправлять электронные письма. У нас было несколько случаев, когда разработчик неосознанно отправлял электронные письма пользователям во время пошагового выполнения кода. Как мы можем предотвратить это снова?
  • Иногда разработчику может потребоваться запустить пакетное задание вручную, подключив отладчик и пошагово просматривая код, который указывает на производственные данные. В этом случае любое электронное письмо, отправленное пакетным заданием, мы хотели бы иметь возможность просмотреть до того, как оно будет отправлено. Существует ли простой способ идентификации этих писем среди всех отправляемых писем, а затем приостановить отправку письма достаточно долго, чтобы просмотреть его?

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

Какой совет вы можете дать? Есть ли одно решение, которое может решить эти проблемы или набор решений? Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Если вы хотите запретить отправку писем при запуске отладочной версии, вы можете написать:

void SendEmail()
{
#if DEBUG
    // do nothing
#else
    // do normal send
#endif
}

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

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

0 голосов
/ 25 апреля 2011

Мы решили проблему доступности SMTP-сервера с помощью попытки / улова - если стандартный SMTP-сервер недоступен, мы используем службы SMTP, предоставляемые IIS, путем записи в каталог раскладки SMTP, как показано здесь:

http://systemnetmail.com/faq/4.7.aspx

Он делает то, что вы ищете - записывает электронные письма в очередь, которая будет отправлять, когда это возможно.

Запись электронной почты на SMTP-сервер IIS каталог подбора службы является еще одним новая функция System.Net.Mail. SMTP каталог раскладки является специальным каталог, используемый SMTP от Microsoft Сервис для отправки электронной почты. Любые файлы электронной почты найденные в этом каталоге обрабатываются и доставлено через SMTP. Если процесс доставки не удается, файлы хранится в каталоге очереди для доставка в другое время. Если смертельный возникает ошибка (например, разрешение DNS ошибка), файлы перемещаются в Каталог плохой почты.

Это, конечно, означает, что службы SMTP установлены на соответствующем веб-сервере.

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

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