Надстройка VSTO для Outlook не перемещает элемент в другой магазин

У меня есть надстройка Outlook, которая перемещает элемент электронной почты в другую папку в другом почтовом ящике. По крайней мере, раньше так было. Теперь он его больше не двигает. Я написал еще одну тестовую надстройку, которая перемещает элемент электронной почты в другую папку в почтовом ящике текущего пользователя, и она действительно работает, поэтому у меня вопрос: есть ли что-то в перемещении элементов в другой почтовый ящик, что вызывает проблему?

Вот код для объяснения вещей:

Чтобы выполнить перемещение в другой почтовый ящик, код создает хранилища для каждого почтового ящика, используя эту строку,

stores = Globals.ThisAddIn.OutlookApplication.GetNamespace("MAPI").Stores;

затем перебирает каждое хранилище, используя цикл foreach,

foreach (Outlook.Store store in stores)

Он получает текущий почтовый ящик для использования позже,

destinationMailboxFolderInbox = (Outlook.Folder)store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

Если DisplayName этого магазина совпадает с тем, которое я указал в качестве места назначения, он переходит к поиску во вложенных папках той, которую я хочу,

if (store.DisplayName.Equals(destinationMailbox))
{
    foreach (Outlook.Folder myFolder in destinationMailboxFolderInbox.Folders)
    {
        if (myFolder.Name.Equals(destinationMailboxFolder))
        {
            item.Move(myFolder);

Проблема в том, что он не запускает последний цикл foreach (цикл по папкам).

Как я уже сказал, он работает, когда я изменяю его для использования почтового ящика текущего пользователя. Это не работает, когда я устанавливаю его на общий почтовый ящик, к которому текущий пользователь может получить доступ.

Есть ли еще один шаг, который мне не хватает?

Обновление: я нашел еще один пост, в котором упоминается что-то, что может быть связано: It's often not a good idea to modify the contents of a (sub)set of items while looping over them. You could modify your code so that it first identifies all of the items that need to be processed, and adds them to a Collection. Then process all the items in that collection. Basically you shouldn't be removing items from the Inbox while you're looping through its contents. First collect all the items you want to process (in your Inbox loop), then when you're done looping, process that collection of items.

PL Staggs 18.12.2018 18:59

Не по всем ли предметам? Или просто какие-то?

Dmitry Streblechenko 19.12.2018 17:06

Когда вы говорите «похоже, что последний цикл foreach не выполняется», это означает, что предыдущий оператор (store.DisplayName.Equals (destinationMailbox)) возвращает false, что означает, что отображаемое имя магазина отличается от ожидаемого.

Dmitry Streblechenko 19.12.2018 17:08

Если не удается по всем пунктам. Во время тестирования я добавил несколько операторов вывода между первым циклом foreach и вторым циклом foreach. Он отображает операторы вывода только для первого.

PL Staggs 21.12.2018 00:04

Завтра перепроверю и подтвердю увиденное во время тестирования.

PL Staggs 21.12.2018 00:05

Я также работал над использованием item.Copy вместо item.Move. Устранение некоторых ошибок объекта.

PL Staggs 21.12.2018 00:15

Я перепроверил и подтвердил увиденное мной поведение. Я тестировал тот же код, разница только в том, проверяет ли он подпапку входящего почтового ящика моего собственного пользователя или подпапку входящего почтового ящика другого общего почтового ящика (то же имя подпапки). В моем собственном почтовом ящике код работает. Когда я переключаю его на выполнение кода в другом почтовом ящике, он не выполняет цикл foreach, который называется «foreach (Outlook.Folder myFolder в destinationMailboxFolderInbox.Folders)». Следующий комментарий объяснит больше.

PL Staggs 21.12.2018 19:20

Когда код попадает в другой почтовый ящик (как «хранилище»), он получает папку «Входящие» по умолчанию, используя эту строку: «destinationMailboxFolderInbox = (Outlook.Folder) store.GetDefaultFolder (Outlook.OlDefaultFold‌ ers.olFolderInbox);» Позже он использует «foreach» для просмотра всех папок / подпапок - «foreach (Outlook.Folder myFolder в destinationMailboxFolderInbox.Folders)». Он не должен находить никаких папок / подпапок, потому что ничего в этом цикле не выполняется. Что мешает ему найти папки в этом почтовом ящике? Что я могу использовать для проверки?

PL Staggs 21.12.2018 19:21

Я нашел эту связанную тему - stackoverflow.com/questions/40382371/… «VSTO Outlook: не удается найти подпапки общего почтового ящика». Автор сообщения сказал, что решил эту проблему, исправив что-то, связанное с разрешениями. Не уверен, где исправить разрешения, но я разберусь с этим.

PL Staggs 21.12.2018 20:39

Вы открывали этот почтовый ящик в Outlook как хранилище делегатов? Вы можете видеть папку «Входящие» и ее подпапки?

Dmitry Streblechenko 21.12.2018 21:21

Кто-то где-то изменил настройки, что позволило мне видеть почтовый ящик в Outlook. Я вижу папку «Входящие» и вложенные папки. Насколько я могу судить, у меня есть полные разрешения.

PL Staggs 21.12.2018 21:59

Значит, destinationMailboxFolderInbox.Folders.Count всегда возвращает 0?

Dmitry Streblechenko 21.12.2018 23:18

Верно, счетчик всегда возвращает 0.

PL Staggs 26.12.2018 16:41

Мы собираемся попробовать войти в систему как пользователь, владеющий папкой. Если это работает для этого пользователя, это указывает на проблему с разрешениями.

PL Staggs 26.12.2018 16:42

Я добился некоторого успеха в моей тестовой надстройке, изменив строку GetDefaultFolder для использования метода, принадлежащего классу Namespace, а не классу Store. Я отправлю подробности позже в качестве «ответа». Однако теперь я получаю некоторые ошибки SignTool в моей старой среде Visual Studio. Исследования.

PL Staggs 27.12.2018 23:26

Что ж, после изменений он нашел элемент (в правильной папке) и переместил его, но переместил его в папку пользователя, а не в общую папку входящих сообщений. Возможно, придется внести другие корректировки.

PL Staggs 27.12.2018 23:36

Я внес некоторые коррективы. Я изменил его, чтобы использовать GetSharedDefaultFolder. Он определил получателя и поместил меня во Входящие. Но inbox.Folders.Count по-прежнему всегда возвращает ноль. Итак, я вернулся к проблеме с разрешениями, которую я не знаю, как решить. Когда я спрашиваю администратора, он говорит, что у меня уже есть полные разрешения.

PL Staggs 29.12.2018 00:36

Я нашел этот другой пост, где пользователь публикует аналогичную проблему с разрешениями, и он отвечает на свое собственное сообщение, говоря, что он решил проблему из-за разрешений, но он не говорит, как. Когда я пытаюсь опубликовать ответ с просьбой предоставить дополнительные сведения, модераторы форума удаляют мое сообщение. Дмитрий, вы можете оставить комментарий к этому сообщению на форуме, чтобы попросить пользователя предоставить подробности? Я не могу оставить комментарий. ссылка на сайт

PL Staggs 29.12.2018 00:39

Outlook хранит папки делегатов по умолчанию в OST-файле основного почтового ящика. Подпапки не синхронизируются. Наблюдаете ли вы такое же поведение, если отключите режим кэширования?

Dmitry Streblechenko 31.12.2018 19:02

У меня нет прав на отключение режима кэширования. Я попрошу своих администраторов сделать это и свяжусь с вами завтра.

PL Staggs 01.01.2019 20:47

Администраторы не дали разрешения на изменение настройки режима кэширования. Мой альтернативный план - переместить это электронное письмо с помощью правил. Или, в крайнем случае, пользователю просто придется переместить его вручную. Основная цель этой надстройки - сохранить вложения. Перемещение его потом вторично. Спасибо за предложения.

PL Staggs 02.01.2019 20:42

Можно ли использовать выкуп?

Dmitry Streblechenko 03.01.2019 06:00

Прошу прощения за поздний ответ по этому поводу. Я не помню, чтобы получал уведомление о вашем сообщении. Я не знаю об этой опции "Выкуп". В итоге я разработал обходной путь. Обходной путь заключался в создании кнопки Outlook «Быстрый шаг» для перемещения электронной почты. Таким образом, пользователь нажмет кнопку «Моя надстройка с кодом VSTO», чтобы сохранить вложения, а затем нажмите кнопку «Быстрый шаг», чтобы переместить электронное письмо в папку.

PL Staggs 10.07.2019 17:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
23
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это была либо проблема с разрешениями, либо ошибка. Вместо того, чтобы решать напрямую, я разработал обходной путь.

Обходной путь заключался в создании кнопки Outlook «Быстрый шаг» для перемещения электронной почты. Пользователь Outlook нажмет кнопку «Моя надстройка с кодом VSTO», чтобы сохранить вложения, а затем нажмите кнопку «Быстрый шаг», чтобы переместить электронное письмо в папку.

Другие вопросы по теме