【问题标题】:Outlook.Application.CreateItem with Office365 says: The operation failed带有 Office365 的 Outlook.Application.CreateItem 说:操作失败
【发布时间】:2016-06-02 18:51:49
【问题描述】:

我们使用 Add-in-Express 编写了一个 Outlook 插件。代码:

private void CreateShowMessageUsingCreateItem(Outlook._Application OutlookApp) 
{ 
    Outlook.MailItem mail = null; 
    try 
    { 
        mail = OutlookApp.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; 
        mail.Save(); 
        mail.Display(false); 
    } 
    catch (Exception ex) 
    { 
        System.Windows.Forms.MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
        if (mail != null) Marshal.ReleaseComObject(mail); 
    } 
} 

当 Outlook 连接到 Exchange 时有效。失败时 Outlook 已连接到 Office365。错误:

Exception: System.Runtime.InteropServices.COMException (0x80004005): The operation failed.
   at Microsoft.Office.Interop.Outlook.ApplicationClass.CreateItem(OlItemType ItemType)
   at DocuSignInk.DSToolbox.ShowResponse(MailItem senderEmail) in C:\docusign_source\Ink_Outlook\DocuSignInk\DSToolbox.cs:line 540

一些研究表明你需要释放你的对象 在循环中进行这些调用时。但我不在一个循环中。我 连一个上班的电话都打不通,所以我没说到点子上 我可以释放任何东西。

使用 Wireshark 和 Charles 进行测试表明问题出在 在客户端。我想看看有没有更详细的 来自服务器的错误,但没有到服务器的流量 完全没有。

一个快速的 Python 脚本可以从命令行运行。

import win32com.client

outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(win32com.client.constants.olMailItem)
mail.Save()
mail.Display(False)

所以它一定是客户端的东西。我猜可能与线程有关?

【问题讨论】:

    标签: outlook office365


    【解决方案1】:

    如果您尚未激活 Microsoft Office(包括 Outlook),就会发生这种情况。

    简而言之,如果测试加载项在激活检查发生之前立即运行,它们就可以工作。 一旦激活检查发生,API 调用就会失败。

    【讨论】:

      【解决方案2】:

      首先,代码正确,无需额外发布。最明显的原因是您的 Outlook 在连接到 Exchange Online 时无法创建邮件项目。您可以使用以下 VBA 宏进行检查:

      Public Sub CreateEmailItem()
      
        Dim mail As Outlook.MailItem
      
        Set mail = Application.CreateItem(olMailItem)
        mail.Save
        mail.Display (False)
      
        Set mail = Nothing
      
      End Sub
      

      问候, Dmitry Kostochko(插件快速团队)

      【讨论】:

      • 我没有 VB,但可以使用快速 Python 脚本。所以它一定是客户端的东西。
      • 可能是权限问题?
      【解决方案3】:

      我遇到了与 HResult 相同的异常,即 -2147467259。
      直接原因是 Outlook 弹出窗口通知其试用版或 Outlook 关闭过程,该过程在您关闭 Outlook 中的先前活动(包括通过执行上述代码显示的电子邮件)后等待处理(此过程由相应的托盘指示图标,直到它消失)。

      您需要先关闭窗口或等待托盘图标消失,然后再执行创建新电子邮件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-25
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多