Значимое взаимодействие с SMTP-сервером IIS в .Net - PullRequest
4 голосов
/ 09 марта 2009

Наша компания еженедельно рассылает информационные бюллетени большому количеству подписчиков. Когда бизнес был очень молодым, до того, как я присоединился к ним, они использовали «бесплатную» версию какого-то массового почтовика, для отправки писем по 5K требовалось шесть часов, и он не обращал внимания на каждую обратную проверку DNS в Интернете.

Я обновил его до специального виджета .Net, который работал на правильном сервере и мог отправлять до 20 000 писем за полчаса с полным соответствием DNS. К сожалению (или к счастью, в зависимости от вашей точки зрения) наш список рассылки перерос этот простой инструмент. В частности, из-за отсутствия надлежащего регулирования он может отправлять больше сообщений, чем сервер может отправлять одновременно. Мне нужно на самом деле следить за тем, насколько полно выделено хранилище исходящей почты IIS SMTP-сервера, и соответственно уменьшать нагрузку.

К сожалению, я не могу найти информацию о том, куда отправляется почтовый объект, когда (или даже если) он превращается в почту. Я могу реализовать наблюдателя файловой системы, если у меня есть место для просмотра, в настоящее время я не могу. Если фактический почтовый файл никогда не создается, я думаю, мне придется создать его для реализации функциональности, но мне нужно знать, где его разместить. Также было бы более обнадеживающим, чтобы система как-то подтвердила отправку, но я понятия не имею, как получить данные из системы, которая говорит, что письмо было отправлено.

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

Большое спасибо.

РЕДАКТИРОВАТЬ: В конце концов я отказался от попытки измерить пропускную способность на SMTP-сервере IIS как плохую работу. Просто не хотелось играть. Сейчас я веду свою регистрацию в отдельном месте и после этого просто перенесу ее на SMTP-сервер. Я до сих пор не знаю никого, кто действительно пытался бы следить за действиями SMTP-сервера IIS, и поэтому этот вопрос на момент написания этой статьи остается без ответа.

Ну да ладно ...

Ответы [ 3 ]

7 голосов
/ 27 августа 2009

Хорошо, я работаю над этим проектом целую вечность, и я подумала, что могу поделиться своими результатами с миром.

SMTP-сервер IIS

Все письма, созданные с использованием SMTP-сервера IIS, в первую очередь отправляются в каталог раскладки. Если вы отправляете одно письмо, то вам придется работать в режиме Матрицы, чтобы действительно увидеть его там, потому что оно, вероятно, просто отправится сразу же.

На выходе из отдельной почты она проходит через папку очереди в IIS.

Если вы хотите наблюдать за счетчиком производительности, чтобы отслеживать этот процесс, вы можете посмотреть «Длина удаленной очереди». (Причина этого заключается в том, что «Длина локальной очереди» отслеживает почту, отправляемую «Локально» внутри сети. «Удаленный» в данном случае относится к «Вне мира». Конкретное определение «Локальный» ускользает от меня при отправке нет локальной почты, но я предполагаю, что это означает, что необходимо перейти в очередь, чтобы перейти к почтовым ящикам, содержащимся в конкретной установке IIS на сервере или любой ее локальной группе.)

С точки зрения Exchange, похоже, что это эквивалент почты, отправленной в домене Exchange, и почты, отправленной из этого домена в более широкий мир.

Так или иначе. Длина удаленной очереди не рассказывает всей истории. Вы также должны посмотреть на Очередь удаленных повторов, количество текущих исходящих соединений и, чтобы пояс и скобки сработали, фактическое количество файлов в каталоге очереди.

И вот почему:

  • Удаленная очередь: все сообщения, которые не имеют еще не было отправлено, однако много раз это было опробовано. Номер письма в настоящее время назначены любому открытому соединения не учитываются, поскольку они находятся в состоянии "быть судимым".
  • Удаленная повторная очередь: все сообщения, которые еще не были отправлены какой-то момент в прошлом был назначен на открытое соединение для доставки. Очевидно, что доставка должна иметь не удалось или сообщение было бы доставлен. Любые сообщения в настоящее время назначен на открытое соединение для повторные попытки не учитываются.
  • Текущие исходящие соединения: показывает, когда сервер пытается отправить в очередь почты, более одного сообщения может быть назначен на исходящее соединение. Присвоенные сообщения не являются учитывается либо в удаленной очереди, либо Удаленная повторная очередь. Физическая
  • Файлы в каталоге очереди: это показывает количество писем все еще в каталог очередей. Это будет уменьшится, поскольку письма успешно доставляется.

Пример: Если у вас 0 исходящих подключений и 50 писем в каталоге Queue, тогда Удаленная очередь, Очередь повторов и Физические файлы будут прочитаны со значением 50. Когда установлен флаг повторения (это настройка в IIS) увеличивается количество подключений и уменьшается количество писем в очередях. До доставки почты количество физических файлов остается неизменным. Однако, поскольку в текущем соединении может быть отправлено более одной почты, соединение 1 может привести к длинам удаленной очереди и очереди повторных попыток 47 или ниже. Если во время события повтора какие-либо письма будут успешно доставлены, количество физических файлов в каталоге очереди уменьшится. Когда соединение закрывается, все счетчики очереди должны снова стабилизироваться.

Регистрация

В библиотеке почты .Net можно указать каталог раскладки отдельно от IIS по умолчанию. Здесь вы можете ставить почту в очередь и получать специальную службу для периодического перемещения писем в каталог IIS, где служба IIS вступает во владение и отправляет письма в очереди.

Для этого вам потребуется свойство DeliveryMethod объекта SmtpClient, для которого должно быть установлено значение SmtpDeliveryMethod.SpecifiedPickupDirectory.

Чтобы на самом деле установить SpecifiedPickupDirectory, вы должны установить свойство PickupDirectoryLocation SmtpClient.

Когда почта доставляется в это место, она сохраняется в виде файлов .eml. Имя файла является GUID. Это означает, что несколько электронных писем будут отправлены в произвольном порядке. Теоретически, вы можете написать код для решения этой ситуации, если хотите. Файл .eml соответствует стандартному формату, который можно прочитать, открыв .eml в блокноте. Разбор этого позволит вам извлечь информацию для журнала.

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

1 голос
/ 09 марта 2009

Я бы использовал компонент PerformanceCounter для считывания счетчика Длина локальной очереди службы SMTP. Это должно держать вас под контролем: -)

0 голосов
/ 09 марта 2009

Если ваш виджет .net сделан на заказ, почему бы просто не ограничить его вывод до некоторой (определяемой) пропускной способности?

В качестве альтернативы вы можете использовать некоторые параметры реестра для SMTP-сервера.

http://blog.rednael.com/CommentView,guid,dc20366c-3629-490a-a8ee-7e8f496ef58b.aspx

Очевидно, есть также некоторые счетчики WMI (SMTP-сервер \ Длина удаленной очереди и SMTP-сервер \ Длина очереди удаленного повтора), которые предоставят вам полезную информацию.

http://www.tech -archive.net / Архив / Интернет-сервер / microsoft.public.inetserver.iis.smtp_nntp / 2008-02 / msg00011.html

...