0x80040109 2013 Outlook IMAP 帐户使用对象模型时Outlook错误

症状

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

运行时错误"-2147221239 (80040109) ":由于邮件已更改,无法执行该操作。

备注

  • This issue occurs only when you run the code in quick连续 to add a UserProperty object to the same email message the second time.
  • 禁用预览窗格或当您在电子邮件之间第二次运行代码之前切换时,不会发生此问题。

解决方法

若要解决此问题,在运行代码以将 UserProperty 对象添加到电子邮件后关闭所有项目。 或者,仅为同一电子邮件运行代码一次。 出现此问题的原因是,多次编辑和保存 IMAP 帐户的电子邮件效率很低。 保存电子邮件时,必须将其作为全新的电子邮件上载到服务器,原始电子邮件将被删除。 如果启用预览窗格,原始电子邮件将保留在内存中,而基础电子邮件因多次上载而更改。

若要重现此问题,请按照以下步骤操作:

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

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

  3. 对同一电子邮件连续运行以下代码两次:

    Function ReproCode()
    Dim oExp As Outlook.Explorer
    Dim oSel As Outlook.Selection
    Dim oMail As Outlook.MailItem
    Dim oProp As UserProperty
    Dim oProps As UserProperties
    
    Set oExp = Application.ActiveExplorer
    Set oSel = oExp.Selection
    
    For iCount = 1 To oSel.Count
    If oSel.Item(iCount).Class = OlObjectClass.olMail Then
    Set oMail = oSel.Item(iCount)
    Set oProps = oMail.UserProperties
    Set oProp = oProps.Add("TextProp", olText, False, 1)
    oProp.Value = "Sample Text"
    oMail.Save
    End If
    Next iCount
    
    Set oExp = Nothing
    Set oSel = Nothing
    Set oMail = Nothing
    Set oProp = Nothing
    Set oProps = Nothing
    
    End Function
    

备注

Microsoft 提供的编程示例仅用于进行说明,而不提供明示或默示担保。 这包括但不限于适销性或对特定用途的适用性的默示担保。 本文假设您熟悉正在演示的编程语言和用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能。 但是,它们不会修改这些示例以提供附加功能或构造过程以满足您的特定要求。