我们使用 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)
所以它必须是客户端的东西。我猜可能与线程有关?