outlook 2013 中的 IMAP 帐户使用 Outlook 对象模型时出现0x80040109 错误

症状

在 Outlook 2013 中使用 outlook 对象模型UserProperty 对象添加到 IMAP 帐户的电子邮件时,收到以下错误消息:

运行时错误 "-2147221239 (80040109)":无法执行操作,因为消息已更改。

注意

  • 仅当你在第二次将 UserProperty 对象添加到同一电子邮件中时,才能快速连续运行代码。

  • 如果禁用 "预览" 窗格,或者在再次运行代码之前切换电子邮件,则不会出现此问题。

解决方法

若要解决此问题,请在运行代码后关闭所有项目以将 UserProperty对象添加到电子邮件中。 或者,为同一封电子邮件运行一次该代码。

出现此问题的原因是,针对 IMAP 帐户多次编辑和保存电子邮件很低效。 保存电子邮件时,必须将其作为一封全新的电子邮件上载到服务器,并删除原始电子邮件。 如果启用了 "预览" 窗格,原始电子邮件将保留在内存中,而基础电子邮件由于多次上载而发生更改。 若要重现此问题,请按照下列步骤操作:

  1. 在邮件列表中选择一封电子邮件。

  2. 请确保 "预览" 窗格已启用。

  3. 快速连续两次为同一封电子邮件运行以下代码:

    Function ReproCode()Dim oExp As Outlook.ExplorerDim oSel As Outlook.SelectionDim oMail As Outlook.MailItemDim oProp As UserPropertyDim oProps As UserProperties   Set oExp = Application.ActiveExplorerSet oSel = oExp.Selection   For iCount = 1 To oSel.CountIf oSel.Item(iCount).Class = OlObjectClass.olMail ThenSet oMail = oSel.Item(iCount)Set oProps = oMail.UserPropertiesSet oProp = oProps.Add("TextProp", olText, False, 1)oProp.Value = "Sample Text"oMail.SaveEnd IfNext iCountSet oExp = NothingSet oSel = NothingSet oMail = NothingSet oProp = NothingSet oProps = Nothing   End Function

注意:Microsoft 提供的编程示例仅用于说明,没有任何明示或暗示保证。这包括但不限于对适销性或特定用途适用性的默示担保。本文假定你熟悉所演示的编程语言,以及用于创建和调试过程的工具。Microsoft 支持工程师可帮助解释特定过程的功能。但是,它们不会修改这些示例以提供额外的功能或构建过程来满足你的特定要求。

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×