Если вы смотрели структуру каталогов, которая создается
после установки Exchange 2007, вы, возможно, заметили папку с
названием Pickup, которая находится внутри нескольких
подпапок корневого каталога Exchange. Эта папка также
присутствовала в предыдущих версиях Exchange, и поэтому ее
можно использовать в определенных целях. Одним из способов
использования этой папки является ее предназначение для
тестирования почтового потока без необходимости использования
почтового клиента. Это осуществляется путем копирования
специально созданных текстовых файлов в эту папку; после чего
Exchange обработает и доставит их должным образом. В этой
статье мы рассмотрим папку pickup и то, как ее использовать
для тестирования почтового потока в рамках вашей
инфраструктуры Exchange.
Настройка папки Pickup
Папка Pickup необязательно есть на каждом установленном
сервере Exchange 2007. На самом деле она присутствует только
на серверах Exchange 2007 с ролью Hub Transport или Edge
Transport. По умолчанию папка pickup располагается в каталоге
\Program Files\Microsoft\Exchange Server\TransportRoles
на том разделе, на который вы установили Exchange, как
показано на рисунке 1.
Рисунок
1: Стандартное расположение папки Pickup
Поскольку настройка папки pickup – это не то, что
выполняете ежедневно, вы, вероятно, догадались, что
настраивается она только с помощью оболочки Exchange
Management Shell. Команда, которую можно использовать для
осмотра параметров этой папки, выглядит следующим образом:
Get-TransportServer. Однако если вы передадите результаты
команды Get-TransportServer cmdlet в команду format-list, вы
увидите, что с ней вернулось множество атрибутов сервера
transport, в результате чего будет совсем не просто найти
атрибуты, специфичные для данной папки. Поэтому нужно
отфильтровать результаты, чтобы найти атрибуты, начинающиеся с
pickup, в результате чего мы имеем следующую
команду:
Get-TransportServer | fl pickup*
Результаты использования этой команды показаны на рисунке
2.
Рисунок
2: Атрибуты папки Pickup
При использовании этой команды следует обратить внимание на
тот факт, что сервер, на котором я запустил эту команду, имеет
установленную роль Hub Transport, поэтому мне не нужно
ссылаться на имя сервера в этом примере. Важно помнить, что
если вы хотите запустить эту команду на удаленном сервере, вам
необходимо указать имя сервера, используя параметр ‘Identity.
Вам также потребуется использовать данный параметр при
выполнении Set-TransportServer команды для модификации
конфигурации папки pickup, как мы увидим далее.
Давайте по очереди рассмотрим каждый атрибут с рисунка 2 и
выясним, для чего каждый из них предназначен, хотя в
большинстве случаев их название говорит само за себя.
Во-первых, атрибут PickupDirectoryMaxHeaderSize используется
для настройки максимального размера заголовка сообщения,
которое Exchange 2007 Hub Transport или Edge Transport сервер
будет получать. По умолчанию этот параметр имеет значение в
64KB и поэтому должен соответствовать для большинства случаев.
Однако если вам все же нужно изменить это значение, вы можете
использовать следующую команду:
Set-TransportServer ‘Identity {server name} ‘PickupDirectoryMaxHeaderSize {value}
Параметр {value} может быть выражен в любых единицах,
начиная от байтов и заканчивая гигабайтами, используя
следующий формат обозначения 128KB или 1MB.
Далее, атрибут PickupDirectoryMaxMessagesPerMinute
определяет то, насколько быстро сервер может обрабатывать
сообщения из папки pickup и имеет значение по умолчанию в 100.
Это стандартное значение подходит для тестирования почтового
потока в любых ситуациях, но если вам нужно написать
приложение, располагающее более 100 сообщений в минуту в папку
pickup, вам понадобится изменить это значение. Конечно, в
таком случае было бы важно протестировать данную конфигурацию,
чтобы убедиться в том, что такой объем потока сообщений не
влияет на общую производительность системы.
Вы также можете ограничивать количество реципиентов на
сообщение применительно к папке pickup посредством атрибута
PickupDirectoryMaxRecipientsPerMessage. Стандартное значение
составляет 100. Если вы настроили свою организацию Exchange
2007 так, что пользователи могут отправлять сообщения
определенному максимальному количеству получателей, чтобы
обеспечить должную производительность системы, следует
настроить папку pickup для соответствия этому значению.
Например, если вы хотите установить максимальное количество
реципиентов сообщения, принадлежащего папке pickup, со
значением в 500, то вам нужно использовать следующую
команду:
Set-TransportServer ‘Identity {server name} ‘PickupDirectoryMaxRecipientsPerMessage 500
Наконец, вы можете изменять расположение папки pickup,
модифицируя атрибут PickupDirectoryPath. Например, вы
применили выделенный массив диска на своем сервере Hub
Transport для управления очередями баз данных и хотите, чтобы
этот выделенный массив также управлял вашей папкой pickup
помимо прочих компонентов. Лично я предпочитаю указывать
полный путь при перемещении папок в другие дисковые массивы. К
примеру, если бы я перемещал папку pickup в раздел E:, я бы
убедился в том, что расположение папки pickup было задано в
E:\Program Files\Microsoft\Exchange
Server\TransportRoles каталог посредством команды:
Set-TransportServer ‘Identity {server name} ‘PickupDirectoryPath
‘E:\Program Files\Microsoft\Exchange Server\TransportRoles\Pickup’
На данный момент вы можете поинтересоваться, можно ли
использовать папку pickup в нечестивых целях, например
отправлять нежелательные сообщения. Если это происходит, то,
скорее всего, это дело рук кого-то из сотрудников вашей
организации. Так что ответ на данный вопрос будет
положительным, поэтому необходимо защищать данную папку
соответственно. Если вы уверены в том, что вам не понадобится
данная папка, вы можете отключить ее, указав ее путь как
$null, как показано в следующей команде:
Set-TransportServer ‘Identity {server name} ‘PickupDirectoryPath $null
Помните, что папка pickup активна по умолчанию для всех
серверов Exchange 2007 с ролями Hub Transport или Edge
Transport.
Отправка сообщений
Теперь, когда мы настроили папку pickup со всеми
необходимыми нам параметрами, давайте посмотрим, как можно ее
использовать. Как я уже говорил ранее в этой статье, папка
pickup используется для отправки сообщений через систему
Exchange 2007 путем простого размещения сообщений электронной
почты в эту папку. Сообщения могут создаваться в простом
текстовом редакторе, например блокноте, и сохраняться как
файлы с .eml расширением, после чего размещаться в
папку pickup для обработки. Содержимое сообщения должно иметь
правильный формат для успешной обработки. Пример простого
текстового сообщения показан на рисунке 3. Обратите внимание
на тот факт, что имя файла - message.eml. Чтобы
Exchange 2007 корректно обрабатывал сообщение, файл должен
иметь расширение .eml.
Рисунок
3: Пример сообщения
Давайте посмотрим, что происходит, когда файл message.eml
копируется в папку pickup. Во-первых, вы увидите краткое
описание файла message.eml, перед тем как он будет
переименован в message.tmp, как показано на рисунке 4.
Этот процесс занял примерно пять секунд перемещения файла в
папку. Допустим, все настроено правильно касаемо формата
сообщения, тогда Exchange обработает его соответственно. В
результате сообщение будет доставлено на желаемый адрес, как
показано на рисунке 5. Довольно интересен тот факт, что .tmp
файл заперт и не может быть открыт в блокноте; при попытке
сделать это появляется сообщение об ошибке В доступе
отказано.
Рисунок
4: Преобразование в .TMP файл
Рисунок
5: Доставленное сообщение
Эти .tmp файлы автоматически периодически удаляются
системой. Мне показалось логичным, что служба Microsoft
Exchange Transport должна отвечать за обработку сообщений
из папки pickup, поэтому мне было интересно узнать, что
произойдет, если данная служба будет остановлена и
перезапущена, прежде чем файлы .tmp будут удалены. Когда
предыдущий .tmp файл все еще существовал в папке pickup, я
остановил и перезапустил службу Microsoft Exchange Transport и
заметил, что все существующие .tmp файлы были удалены.
Неправильное форматирование
Что произойдет, если .eml файл имеет некорректный формат?
При тестировании я взял оригинальный message.eml файл и удалил
первую строку, определяющую отправителя сообщения. В
результате вместо переименования файла в файл с .tmp
расширением и последующей отправкой сообщения, Exchange
переименовал его в файл с расширением .bad и оставил
этот файл в папке pickup, как показано на рисунке 6.
Рисунок
6: Некорректное сообщение
Вдобавок, в журнал регистрации событий приложений была
внесена запись, как показано на рисунке 7. Запись имеет
источник MSExchangeTransport и ID события 9010.
Это описание довольно специфично для природы проблемы, но оно
не указывает имени файла, ставшего причиной этой проблемы.
Учитывая это, вам лишь нужно искать .bad файлы в папке pickup
и осматривать их на предмет ошибок формата.
Рисунок
7: Запись журнала событий о некорректном
сообщении
Еще один интересный момент, который я заметил, заключается
в том, что в отличие от .eml файлов, как только в папке
появлялся .bad файл, он не удалялся после остановки и
перезапуска службы Microsoft Exchange Transport. Очевидно, эти
файлы нужно удалять вручную, поэтому когда вы видите ID
события, как показано на рисунке 7, знайте, что вам нужно
вмешаться, чтобы не допустить нагромождения нежелательных
файлов в этой папке. Я также заметил, что после того, как
служба Microsoft Exchange Transport была перезапущена, новая
копия 9010 ID события не записывалась в журнал регистрации
событий, пока не появлялась новая ошибка некорректного
сообщения. Это позволяет избежать ложных предупреждений всякий
раз, когда служба Microsoft Exchange Transport
перезапускается.
Заключение
Папка SMTP Pickup в серверах Exchange 2007 Hub Transport
или Edge Transport может легко ускользнуть от внимания
администраторов, которые хотят протестировать поток сообщений
или, возможно, ищут простых способов отправки сообщений без
использования почтового клиента. Однако стоит напомнить себе о
существовании этой папки и более того, если вы заинтересованы
в безопасности и не хотите ее использовать, вы всегда сможете
отключить ее функциональные возможности.