在 Outlook 2013 中将 Outlook 对象模型用于 IMAP 帐户时出现0x80040109错误

症状

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

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

注意

  • 仅当快速连续运行代码以第二次将 UserProperty 对象添加到同一电子邮件时,才会发生此问题。
  • 如果预览窗格处于禁用状态,或者在第二次运行代码之前在电子邮件之间切换,则不会发生此问题。

解决方法

若要解决此问题,请在运行代码以将 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 支持工程师可以帮助解释特定过程的功能。 但是他们不会修改这些示例以提供额外的功能,也不会构建过程以满足您的特定要求。