我正在开发一个通过Web引用访问Exchange Web服务的客户端。(不是托管 API)。 这是我第一次与 EWS 合作,所以我希望这只是我忽略的一个简单错误。
我有一个名为MoveItem的方法,它应该接收电子邮件并将其从收件箱移动到目的地文件夹。 当我运行此代码时,该项目确实从收件箱中消失,但它永远不会显示在目标文件夹中。 我花了几天时间在网上查看示例,但我也无法找到其他遇到类似问题的人。 谁能告诉我我做错了什么? 提前致谢
斯科特
static void MoveItem(ExchangeServiceBinding esb, BaseFolderType destinationFolder, MessageType msg)
{
ItemIdType[] items = new ItemIdType[1] { (ItemIdType)msg.ItemId };
BaseFolderIdType destFolder = destinationFolder.FolderId;
MoveItemType request = new MoveItemType();
request.ItemIds = items;
request.ToFolderId = new TargetFolderIdType();
request.ToFolderId.Item = destFolder;
try
{
MoveItemResponseType response = esb.MoveItem(request);
ArrayOfResponseMessagesType aormt = response.ResponseMessages;
ResponseMessageType[] rmta = aormt.Items;
foreach (ResponseMessageType rmt in rmta)
{
if (rmt.ResponseClass == ResponseClassType.Error)
{
throw new Exception("Item move failed.");
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
绝对不是这里的专家,但这是我用来抓取项目并将其移动到文件夹中的以下代码:
Folder rootfolder = Folder.Bind(service, WellKnownFolderName.MsgFolderRoot);
rootfolder.Load();
foreach (Folder folder in rootfolder.FindFolders(new FolderView(100)))
{
// Finds the emails in a certain folder, in this case the Junk Email
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.JunkEmail, new ItemView(10));
// Enter your destination folder name below this:
if (folder.DisplayName == "Example")
{
// Stores the Folder ID in a variable
var fid = folder.Id;
Console.WriteLine(fid);
foreach (Item item in findResults.Items)
{
// Load the email, move it to the specified folder
item.Load();
item.Move(fid);
}
}
}
关于 EWS 的一件事是,当移动到文件夹时,文件夹的 ID 是关键。 在此示例中,我首先在收件箱中找到文件夹,然后访问邮件。 因此,有关单个邮件的任何代码都将在找到文件夹后进行。
我有同样的问题。移动的邮件不存在于文件夹 (outlook.com) 中,但可以通过具有新分配 ID 的 API 进行检索。
Outlook.com 可以在搜索中找到它,但在加载消息正文时出现错误: Error: Your request can't be completed right now. Please try again later.