首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Office365的Outlook.Application.CreateItem说:操作失败

带有Office365的Outlook.Application.CreateItem说:操作失败
EN

Stack Overflow用户
提问于 2012-06-28 03:34:04
回答 3查看 3.8K关注 0票数 3

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

代码语言:javascript
复制
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时失败。错误:

代码语言:javascript
复制
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脚本可以从命令行运行。

代码语言:javascript
复制
import win32com.client

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

所以它一定是客户端中的某个东西。我猜是不是和线程有关?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-04 02:09:43

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 00:01:00

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

代码语言:javascript
复制
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 (Add-in Express Team)

票数 0
EN

Stack Overflow用户

发布于 2016-06-02 18:33:25

我和HResult有相同的异常,是-2147467259。

直接原因是outlook弹出窗口通知其试用版,或者outlook关闭进程在您关闭outlook中之前的活动后处于挂起状态,包括通过执行上述代码显示的电子邮件(此进程由任务栏中相应的托盘图标指示,直到它消失)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11233666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档