Каков наилучший способ обработки электронной почты во многих приложениях? - PullRequest
2 голосов
/ 26 июля 2011

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

Я пытаюсь выбрать наилучший способ гарантированной доставки электронной почты. Если наш сервер Exchange выйдет из строя, то приложения, которые отправляют на него напрямую, больше не смогут отправлять электронные письма, а также любые электронные письма, отправленные во время простоя, никогда не получат. Я также хотел бы реализовать универсальное шаблонное решение, которым могут пользоваться все приложения.

Существуют ли заранее подготовленные решения этой проблемы, или у вас есть понимание, как решить эту проблему?

Ответы [ 5 ]

2 голосов
/ 26 июля 2011

Я слышал хорошие отзывы о Postmark.Может быть, такой сервис мог бы быть решением, поскольку он имеет несколько точек интеграции.

http://postmarkapp.com

2 голосов
/ 26 июля 2011

Мы решили эту проблему, создав веб-сервис, который отправляет все наши электронные письма. Этот веб-сервис использует

System.Net.Mail.SmtpDeliveryMethod.PickupDirectoryFromIis 
Параметр

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

Гарантированная доставка, пока работает веб-сервис. Поскольку у нас есть проверки на избыточность, это почти никогда не является проблемой. Если это так, мы рассматриваем это как ошибку в коде и обрабатываем ее.

редактировать - добавлено

Я забыл упомянуть, что XSS представляет собой проблему даже в электронной почте, поэтому обязательно используйте что-то вроде библиотеки Microsoft.Security.AntiXss, которая содержит функции, такие как GetSafeHtmlFragment, для удаления потенциально опасных сценариев перед выводом html в электронную почту.

http://msdn.microsoft.com/en-us/security/aa973814.aspx

http://msdn.microsoft.com/en-us/library/aa973813.aspx

0 голосов
/ 26 июля 2011

Как упоминалось ранее, вы можете использовать веб-сервис, который вы обычно можете POST JSON использовать HTTP-запрос. Вот несколько вариантов:

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

( Полное раскрытие: Я менеджер по продукту PostageApp.)

0 голосов
/ 26 июля 2011

Я делаю это путем помещения электронной почты в базу данных сервера SQL. Любая совместимая с ACID база данных будет работать, или вы можете использовать MongoDB со вставками «безопасного режима», но если вам действительно нужна гарантия, тогда используйте SQL-сервер или MySQL. Таким образом, если ваша почта попадет в базу данных, она «гарантированно» не будет потеряна, и вашему приложению не придется об этом думать. Вы можете использовать веб-сервис или просто создать общую сборку со статическим публичным методом в классе, чтобы оставить вашу электронную почту в БД для вас.

Включите столбец для статуса, такого как «новый», «доставлен», «почтовый ящик получателя временно заполнен», который можно представить числовыми значениями, и оставьте столбец TimeToSend, который начинается как время, когда электронная почта помещается в очередь в базы данных.

Тогда у вас есть почтовое приложение, которое вы можете запускать раз в минуту как запланированное задание Windows. Сделать это как консольное приложение. Когда он загружается, он проверяет, запущен ли его экземпляр, и если он есть, он закрывается. Когда работает: 1. Попытки доставить каждую почту на почтовый сервер. Запросите базу данных для всей почты, где TimeToSend старше, чем сейчас.
2. Если почта доставляется на почтовый сервер, пометьте ее как логически удаленную. 3. Если какое-либо письмо не может быть доставлено, переместите столбец TimeToSend для них на 10 минут.
4. Удалить записи из таблицы, которые логически удалены. Вы можете сделать это в приложении или сделать это с помощью задания sql.

0 голосов
/ 26 июля 2011

Мы использовали HMailServer (на платформе Windows), который является бесплатным.Настроил максимальное количество повторных попыток на слишком много и использовал внешнюю SMTP для ретрансляции электронной почты.наши приложения запрашивают электронные письма на HMailServer, и этот сервер передает их дальше.с максимальным числом повторных попыток, настроенным на множество, если на всех основных серверах smtp не работает, мы можем гарантировать, что электронная почта доставлена ​​- но, хотя нет никаких гарантий, если есть большие простои с основными серверами ретрансляции SMTP.

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