Стратегия отправки электронной почты с C # /. NET - PullRequest
4 голосов
/ 08 октября 2011

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

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

В качестве альтернативы я думал о внедрении системы массового обслуживания для того, что у меня есть некоторые идеи:

  • Нажмите электронные письма для отправки в таблицу базы данных, и приложение-служба периодически проверяет наличие новых сообщений, а затем отправляет их. При успешной отправке отмечается, что задание электронной почты завершено.
  • Использовать MSMQ для очередей. В этом случае вся электронная почта может быть передана как сообщение; или другой способ - сохранить сообщение с вложениями в таблицу базы данных и передать только те данные, которые необходимы для запроса таблицы базы данных и отправки сообщения. В этом случае мне не нужно иметь дело с ограничениями размера MSMQ (из-за вложений).
  • что-то еще, например, локальная служба WCF для уведомления службы

Какой способ вы считаете лучшим?

Ответы [ 2 ]

5 голосов
/ 08 октября 2011

Использование MSMQ не является хорошим решением, поскольку имеет ограничение 4 МБ для каждого размера. http://blogs.msdn.com/b/johnbreakwell/archive/2007/08/22/why-is-there-a-4mb-limit-on-msmq-messages.aspx В худшем случае, если MSMQ завершится неудачно, например, из-за ошибки обработки или внезапного выключения, будет потеряно много сообщений. В моем случае это решение хорошо, когда аппаратное и программное обеспечение установлено почти идеально

Лучше использовать службу баз данных и окон, поскольку она проста и не требует особых усилий.

Я обычно использую комбинацию базы данных и файла. База данных содержит таблицу для сохранения информации заголовка и отметку о том, что сообщение было действием (либо успешным, либо ошибочным, либо другим), а файлы содержат сообщение (в формате html или обычное) и вложение в исходном формате. Когда процесс запускается для отправки, он быстрее собирает сообщения из файлов, чем из запросов blob / clob. Так как они используют файловую систему в приложении, вы можете добавить аппаратное обеспечение, такое как сервер или компоненты, или еще, чтобы легко добавить доступность системы. База данных также может быть добавлена, но это обойдется вам дороже в программном обеспечении для базы данных. Я добавляю тестовое электронное письмо после отправки электронного письма в x раз, чтобы убедиться, что оно работает хорошо; это тестовое электронное письмо отправляется на мою собственную или фиктивную почту и в приложение для проверки тестового электронного письма, которое совпадает с тем, которое отправляется и получает. Если это то же самое, отправка ожидающего электронного письма продолжится снова

Другой способ, если вы используете MS Exchange, вы можете использовать очередь сообщений, используя ее веб-сервис для очереди отправки. Это простой способ, но вам нужна лицензия. В библиотеке MSDN вы можете увидеть, как использовать веб-сервис MS Exchange.

0 голосов
/ 08 октября 2011

Вы можете использовать почтовый сервер, такой как hmail.Чтобы отправить сообщения в очередь, вы можете отправить их на почтовый сервер.Для этого вы можете написать приложение формы Windows, в котором есть объект таймера, который проверяет каждую строку, имеющую статус 0 (не отправлено) в таблице электронной почты.Когда поток отправляет его на почтовый сервер, он будет помечен как 1 (отправлено).

Вы также можете классифицировать свои электронные письма, если используете DB.Различные действия могут отправлять разные электронные письма.Вы также можете сохранить эту информацию в БД, чтобы ваша ветка приложения Windows Form теперь находила шаблон электронной почты для отправки.

...