使用 Outlook 2013 的 IMAP 帳戶 Outlook 物件模型時,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 支援工程師可協助說明特定程序的功能。 不過,他們不會修改這些範例,以提供額外的功能或建立程式,以符合您的特定需求。