IIS/SMTP - невозможно переместить электронные письма из inetpub/mailroot/Queue из-за блокировки файла

У меня есть слушатель, который обрабатывает электронные письма в inetpub/mailroot/Queue каталог. После того как слушатель завершит обработку электронного письма, он переместит его в другой каталог. Однако перемещение электронной почты невозможно из-за блокировки файла процессом inetinfo.exe, Я заметил, что эта блокировка файла снимается после периода времени, который колеблется от нескольких часов до нескольких дней. Вы можете видеть, что Queue каталог может быть довольно полным с течением времени.

Единственный способ обойти это - вручную остановить и запустить мой виртуальный SMTP-сервер в IIS.

Можно ли снять эту блокировку файла программно? Если нет, возможно ли ускорить снятие блокировки файла?

ОБНОВИТЬ

Слушатель следит за Queue папка для входящих писем, а затем обрабатывает их. Данные из электронных писем затем вставляются во внутреннюю нашу программу. После того, как слушатель завершает работу с электронной почтой, он перемещает электронную почту в каталог с успехом или неудачей в другом месте.

РЕШИТЬ

Вернувшись к этой проблеме почти год спустя, я наконец смог ее решить! Решение состояло в том, чтобы настроить локальный (по умолчанию) домен SMTP Virtual Server и установить для него соответствующий домен электронных писем, которые я хотел обработать. Это привело к тому, что письма пошли в Drop папка, в которой ими можно свободно манипулировать, не беспокоясь о блокировках процессов.

2 ответа

Решение

Каталог "Очередь" предназначен для внутреннего использования процессом SMTP-сервера. Вы находите файлы там заблокированными, потому что вы не должны работать с ними там. Если ваш каталог "Очередь" заполняется, то вам лучше всего выяснить, почему не удается доставить почту. Мне неясно, может ли старый инструмент SMTPDiag от Microsoft работать на Windows Server 2008, но это было бы место для начала.

Обновить:

Мне неясно, что именно вы пытаетесь сделать со своей задачей обработки. Папка "Очередь" используется для хранения сообщений, ожидающих доставки. Сообщения, принятые для локальной доставки, хранятся в папке "Drop". Предполагая, что вы ищете сообщения, которые принимаются для локальной доставки, я был бы обеспокоен тем, почему они зависают в "очереди" и не заканчивают в "отбрасывать". В "очереди" не должно быть файлов, если что-то работает неправильно.

(В качестве отступления: поиск документации: служба SMTP в Windows Server 2008 оказывается довольно сложной. Служба SMTP всегда была чем-то вроде сироты, живущей в потустороннем мире между ОС Windows и Exchange. > Вздох<)

В реестре есть некоторые параметры для контроля времени блокировки...

но чтобы было проще...

Просто перезапустите IIS (как запланированное задание каждые n минут), если вы используете IIS 7.0, сделайте это так...

// stop iis and other web services
net stop WAS

// 
( pause a few seconds, +30s )
>>> Do your processing... files should be released now...

// start iis and web services
net start W3SVC
Другие вопросы по тегам