По разным причинам мне нужно перенести несколько миллионов писем из одного решения для архивирования в другое. Единственный способ получить данные из Решения А - это использовать проприетарную утилиту для создания дампа отдельных файлов .MSG. Я написал это, и он работает нормально. Чтобы поместить эти файлы .MSG в Решение B, их необходимо добавить в почтовый ящик Exchange, который Решение B затем периодически (ежечасно) очищает. Я тоже это написал. К сожалению, у меня очень специфическая проблема. Каждый файл .MSG, выгруженный из Решения A, содержит информацию заголовка в теле и исходное электронное письмо, включенное в виде вложения со всеми сохраненными метаданными. Это нормально, однако мой скрипт, похоже, сбрасывает процент вложений. Интересно то, что если я запускаю Outlook в режиме кэшированного обмена, у меня не возникает этой проблемы (но возникает множество других проблем, когда Outlook должен синхронизировать десятки тысяч электронных писем. Когда я отключаю режим кэшированного обмена, он начинает сбрасывать вложения.
Скрипт довольно длинный (350 строк), но я выделил точку, в которой сбрасываются вложения. Для контекста, скрипт получает список файлов .MSG в дереве каталогов, а затем импортирует их по одному, пока в папке «Входящие» не окажется 30 000 писем. Затем он ждет, пока запустится очистка, и очистит почтовый ящик, прежде чем начать снова.
Точка разрыва находится между этими двумя линиями.
$olMailItem = $NameSpace.OpenSharedItem($msg)
[void]$olMailItem.Move($objNewFolder)
Если я распечатаю $olMailItem.Attachments
после первой строки он всегда возвращает значение 1. Если я распечатываю его после второй строки, для одного и того же набора писем он периодически возвращает значение 0. Это я интерпретирую как файл открыт правильно, но процесс размещения его в обмен вызывает падение некоторых вложений. Я не могу найти в Google никого с той же проблемой, что и я. И эта проблема, похоже, не возникает, когда я включаю режим кэшированного обмена (но заставляет меня иметь дело с кучей худших проблем). Я просмотрел справочник разработчика MSDN Outlook, но не вижу ничего, что явно неправильно. Надеюсь, кто-то из присутствующих сможет дать некоторое представление о том, что может быть причиной этого.