gpt4 book ai didi

c# - EWS FindItemsResults Item.Move() 不会将某些项目类型移动到邮件文件夹,例如 IPM.Appointment

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:34 28 4
gpt4 key购买 nike

我有一些代码可以将项目从已删除项目移动到邮件文件夹中。该代码运行良好并且通常移动所有项目。当它遇到一个不是 IPM 的项目时,就会出现问题。请注意。它给出的错误是空引用(参见:What is a NullReferenceException, and how do I fix it?)

这很奇怪,因为那里有项目而且它不能为空。

这是一段代码摘录:

// Specify the Exchange Service
ExchangeService E_SERVICE = new ExchangeService(ExchangeVersion.Exchange2010_SP2);

// Look at the root of the Mailbox (Top of Information Store)
FolderId fldr_id = WellKnownFolderName.MsgFolderRoot;

// Define the folder view
FolderView newFV = new FolderView(1000);

// Perform a deep traversal
newFV.Traversal = FolderTraversal.Deep;

// Get the results of all the folders in the Mailbox
FindFoldersResults f_results = E_SERVICE.FindFolders(fldr_id, newFV);

// Define the source and target folder id variables as null.
FolderId src_fldr_id = null;
FolderId tgt_fldr_id = null;

// Define the folders we are looking to move items from the source to the target
string source = "Deleted Items"
string target = "Old Deleted Items"

// Search through all the folders found in the mailbox
foreach (Folder fldr in f_results)
{
// If the source folder name is the same as the current folder name then set the source folder ID
if (fldr.DisplayName.ToLower() == source.ToLower())
{
src_fldr_id = fldr.Id;
}
// If the target folder name is the same as the current folder name then set the target folder ID
if (fldr.DisplayName.ToLower() == target.ToLower())
{
tgt_fldr_id = fldr.Id;
}
}

// Get all the items in the folder
FindItemsResults<Item> findResults = E_SERVICE.FindItems(src_fldr_id, new ItemView(1000));

// If the number of results does not equal 0
if (findResults.TotalCount != 0)
{
// For each item in the folder move it to the target folder located earlier by ID.
foreach(Item f_it in findResults)
{
f_it.Move(tgt_fldr_id);
}
}

我们在以下行中抛出错误:

        f_it.Move(tgt_fldr_id);

这是一个空引用异常,不可能是这种情况,因为那里有项目,而且通常是不是 IPM 的项目。注意。

那么我将如何解决这个问题并确保无论元素是什么类型都能移动?

我之前已经在这里发布过关于这个 Unable to move Mail items of different Item classes from the same folder using EWS 的信息

只有在实际情况并非如此时才被驳斥为 NullReferenceException!

因此,我们将不胜感激任何有帮助的答案。

最佳答案

好吧,解决这个问题的方法是确保在执行 Move() 之前先 Load() 项目

确保使用 try..catch block 并像下面这样处理异常:

try
{
f_it.Move(tgt_fldr_id);
}
catch (Exception e)
{
Item draft = Item.Bind(E_SERVICE, f_it.Id);
draft.Load();
draft.Move(tgt_fldr_id);
}

这将强制项目单独加载然后移动它,即使它抛出错误也是如此。为什么,它这样做还不知道。但应该希望能帮助那些苦苦挣扎的人为什么会收到 NullReferenceException

谢谢大家!

编辑:您可能想阅读 https://social.msdn.microsoft.com/Forums/exchange/en-US/b09766cc-9d30-42aa-9cd3-5cf75e3ceb93/ews-managed-api-msgsender-is-null?forum=exchangesvrdevelopment为什么某些项目为 Null,因为这将帮助您更好地处理返回的 Null 项目。

关于c# - EWS FindItemsResults<Item> Item.Move() 不会将某些项目类型移动到邮件文件夹,例如 IPM.Appointment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42206187/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com