6

I am working on a client that access an Exchange Web Service via a web reference. (not the Managed API). This is the first time I'm worked with EWS so I hope its just a simple mistake that I overlooked.

I have a method called MoveItem that is supposed to take email message and move it from the Inbox to destinationFolder. When I run this code, the item does disappear from the Inbox however it never shows up in the destination folder. I've spent a couple of days looking at examples online and I've also not been able to find anyone else that has had a similar issue. Can anyone tell me what I am doing wrong? Thanks in advance

Scott

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);
}

}
4

2 回答 2

5

Definitely not an expert here, but this is the following code I used to grab an item and move it into a folder:

        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);
                }

            }
        }

One thing about the EWS is that when moving to a folder, the ID of the folder is key. In this example, I first find the folders in the inbox, then access the messages. Therefore, any code regarding the individual message would go after the folders have been found.

于 2012-12-04T19:16:39.810 回答
-2

I have same problem. The moved message doesn't exists in folder (outlook.com) but can be retrieved via APIs with new assigned id.

Outlook.com can find it in search with an error while loading message body: Error: Your request can't be completed right now. Please try again later.

于 2013-07-16T10:39:00.753 回答