Ms office MailItem。在Outlook 2013中,使用Hotmail EAS提供程序在Hotmail文件夹之间移动失败?

Ms office MailItem。在Outlook 2013中,使用Hotmail EAS提供程序在Hotmail文件夹之间移动失败?,ms-office,outlook-addin,outlook-2013,Ms Office,Outlook Addin,Outlook 2013,使用Microsoft Outlook 2013对象模型(MailItem.Move)以编程方式将邮件从hotmail收件箱移动到同一hotmail/Outlook.com存储中的文件夹时,此方法失败,并显示错误消息: Sorry, ActiveSync doesn't support what you're trying to do 但是,手动将同一条消息拖动到同一个文件夹就可以了 我知道,根据设计,用于Outlook的EAS提供程序无法将邮件项目从外部(如.PST存储)移动到Hotmail

使用Microsoft Outlook 2013对象模型(MailItem.Move)以编程方式将邮件从hotmail收件箱移动到同一hotmail/Outlook.com存储中的文件夹时,此方法失败,并显示错误消息:

Sorry, ActiveSync doesn't support what you're trying to do
但是,手动将同一条消息拖动到同一个文件夹就可以了

我知道,根据设计,用于Outlook的EAS提供程序无法将邮件项目从外部(如.PST存储)移动到Hotmail文件夹中,因为这违反了Hotmail的“不导入”限制

但是这种特殊的行为不能用这种方式解释,因为在这种情况下,它也不能支持手动拖放!这与将任何内容导入Hotmail也没有任何关系,因为该项目仅在单个Hotmail存储中的文件夹之间移动

所以我想知道:这是设计的还是一个bug? 也许有解决办法吗

快速复制案例: (假设已安装,但使用基本的VSTO加载项也应该很容易进行模拟)

将hotmail/outlook.com帐户添加到outlook配置文件中

在hotmail/outlook.com收件箱中创建子文件夹

定位hotmail/outlook.com收件箱中的邮件项目

单击Outlook Spy功能区选项卡

单击Outlook Spy功能区中的项目按钮

单击MailItem对话框中的脚本选项卡

输入以下脚本并按Run键:

set inbox = MailItem.Parent    
set childfolder = inbox.Folders.item(1)
MailItem.Move childFolder

注意:MS Outlook 2013 v15.0.4693.1001(32位)

中观察到了这一点。如果不支持移动,Outlook不会移动邮件-它会在目标文件夹中创建邮件,复制所有属性,然后删除原始属性。请尝试以下操作:

set inbox = MailItem.Parent    
set childfolder = inbox.Folders.item(1)
set NewMessage = MailItem.Copy
NewMessage.Move childFolder
'MailItem.Delete
或者您可以尝试使用及其.CopyTo方法(它可以将另一个RDOMail对象或对象作为参数):


您可以尝试为此使用Redemption-请参阅上面的更新答案。您好,Dmitry,Redemption通过调用扩展MAPI api在内部执行此操作,对吗?我熟悉使用C++扩展的MAPI,并且已经广泛使用它来在Outlook中进行只读操作。但对于实际移动电子邮件,我希望通过仅使用有文档记录的Outlook对象模型,尽可能保证事情的安全。还是我有点偏执?是的,《救赎》使用扩展MAPI。我会将此标记为解决方法的答案。仍然希望有人能解释一下为什么MailItem.Move方法本身不能与Hotmail一起使用,因为在调用IMAPIFolder::CopyMessages(…,MESSAGE_Move)时,存储提供程序返回了一个错误。
  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set OldMsg = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID)
  set childfolder = Session.GetDefaultFolder(olFolderInbox).Folders.item(1)
  debug.print childfolder.name
  set newMsg = childfolder.Items.Add
  newMsg.Sent = OldMsg.Sent 'it is not copied
  OldMsg.CopyTo(newMsg)
  newMsg.Save
  OldMsg.Delete