我们已经使用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)所以它一定是客户端中的某个东西。我猜是不是和线程有关?
发布于 2012-08-04 02:09:43
如果您尚未激活Microsoft Office (包括Outlook),则可能会发生这种情况。
简而言之,如果在激活检查发生之前立即运行测试加载项,它们就可以工作。一旦激活检查发生,API调用就会失败。
发布于 2012-06-29 00:01:00
首先,代码是正确的,不需要额外的发布。最明显的原因是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 SubDmitry Kostochko (Add-in Express Team)
发布于 2016-06-02 18:33:25
我和HResult有相同的异常,是-2147467259。
直接原因是outlook弹出窗口通知其试用版,或者outlook关闭进程在您关闭outlook中之前的活动后处于挂起状态,包括通过执行上述代码显示的电子邮件(此进程由任务栏中相应的托盘图标指示,直到它消失)。
您需要先关闭窗口或等待托盘图标消失,然后才能执行创建新电子邮件。
https://stackoverflow.com/questions/11233666
复制相似问题