Как стать автором
Обновить

Комментарии 15

а Вы пробовали использовать это в деле?
это один из наихудших вариантов, т.к. при отправке письма весь поток будет блокирован (пока письмо не отправиться), который будет блокировать остальные потоки в тред-пуле — проверено на себе. в данном случае, заменить все это дело на IOCP не получится.

как вариант — лучше использовать MSMQ (или что-то подобное) — сериализовать модель, отправить в очередь. Далее можно использовать win-service, для обработки очереди сообщений.
конечно для этого придется еще и хостить Razor отдельно (туториалов в сети на эту тему полно).
Да, я использую его. Для исключения блокировки можно использовать асинхронную отправку.
в ASP.NET количество тредов детерминировано с возможной регуляцией. весь смысл моего комментария — выделение всей ресурсоемкой работы вне приложения.
не надо использовать доп. треды из пула самого приложения.
тем более асинхронная отправка все равно использует потоки (она лишь возвращает контроль потоку).
Это все хорошо, но зачем такие сложности, когда надо просто отправить очень небольшое количество писем?
для небольшого количества писем — ок. а если регистрация пользователей, или рассылка, или нотификации?
это примерно такая же ситуация как и стандартный asp.net membership.
Для массовых рассылок и нотификаций, естественно, нужен другой подход. Например сторонняя софтина, запускаемая по расписанию, и работающая напрямую с бд и занимается рассылками.
Для отладки удобно использовать smtp4dev.
Для шаблонов писем не видел ничего удобнее, чем NVelocity — значительно легче использовать, чем Razor + меньше геморроя при отладке отображения шаблонов. Например, с Razor была проблема с лишними переносами строк (которые влияют на внешний вид письма, если оно отправляется не в формате HTML).
Спасибо, попробуем.
А я вот наоборот — перевёл с NVelocity на RazorEngine.
а можете рассказать подробнее, по каким причинам?
Эмм а простой System.Net.Mail.SmtpClient для отправки чем не угодил (http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx)?

Варьируя DeliveryMethod — можете и на диск складывать и сразу отправлять
Всякую асинхронность — берем, настраиваем стандартный smtp и кладем eml файлы в его папку Inetpub\mailroot\pickup. По сути — записали на диск=отправили ;)

Хотите высшего пилотажа — Exchange Web Services имеет обертку на C#.
А шаблонизаторы текста и генераторы формочек — пользуйтесь какими нравится
Я иногда пользуюсь похожей библиотекой.
По сути это надстройка над System.Net.Mail.SmtpClient.
Основная её задача — отрендерить тело письма через Razor и передать его в System.Net.Mail.SmtpClient.
В общем речь больше о том — зачем «родине слонов» новые велосипеды :)
Note: Глюченный стандартный компонент (от версии 2 до 4 .netfx включительно). Проблема в кодировании заголовков у него есть.
[по статье]
Спасибо, для небольших проектов и дебага очень даже пригодится.

[оффтоп]
Вячеслав, продолжите, пожалуйста, вашу серию. Иначе этот комментарий с учетом Ваших последующих статей (раз, два, три, четыре, пять, шесть) выглядит немного странновато. Или же просто сообщите, что продолжения не будет (хотя, если быть до конца честным, тогда странным будет выглядеть Ваш инвайт и 100500 яростных плюсов кармы авансом за две по сути пустых статьи).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории