Это кажется довольно простым. Мне нужно отправить электронную почту из некоторых приложений ASP.NET. Я должен делать это последовательно без странных ошибок и без использования процессора, идущего вверх. Я не говорю о массовых рассылках, просто случайные письма.
System.Net.Mail кажется ужасно сломанным. SmtpClient не выдает команду Quit (это может быть потому, что Microsoft (R) не заинтересована в следующих спецификациях), поэтому соединение остается открытым. Поэтому, если кто-то попытается отправить электронное письмо до того, как это соединение finally закроется, вы можете получить ошибки от SMTP-сервера об слишком большом количестве открытых соединений. Это ошибка, которую Microsoft (R) совершенно не заинтересована в исправлении. Смотрите здесь:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=146711
Также, если вы посмотрите вокруг, некоторые предложат использовать этот код для решения этой проблемы:
smtpClient.ServicePoint.MaxIdleTime = 1;
smtpClient.ServicePoint.ConnectionLimit = 1;
Хорошо, да, это "решает" проблему, когда соединения остаются открытыми. Тем не менее, это последовательно, попробуйте на сервере, если хотите, заставляет процессор, на котором запущен процесс (в данном случае w3wp.exe), переходить на 100% до тех пор, пока ваш пул приложений не будет перезагружен. По какой-то причине виновником является поток, который запускает mscorwks.dll! CreateApplicationContext.
Это имеет очень приятный побочный эффект: если вы работаете на веб-хосте, который хмурится при постоянной загрузке процессора на 100%, вы отключите пул приложений. Так что это не так тривиально, как некоторые предполагают.
Итак, мой вопрос: что делать? Что мне нужно сделать, это так просто; однако получение ошибок «слишком много открытых соединений» неприемлемо и 100% загрузка ЦП. Я не хочу покупать сторонние компоненты не потому, что я дешевый, но я покупаю достаточно компонентов и подписку MSDN, так что кажется просто сумасшедшим, чтобы выложить 100-300 долларов за простую функциональность SMTP.
Я читал, что установка MaxIdleTime выше может помочь, но я скептически отношусь к этому. Я не хочу рисковать отключением пула приложений только потому, что Microsoft не хочет следовать спецификации SMTP.
Редактировать: Я посмотрел на компоненты quiksoft.com, однако он не поддерживает аутентификацию SMTP и стоит 500 долларов. Должно быть решение этой проблемы.