We’ve written an Outlook plugin using Add-in-Express. Code:
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);
}
}
Works when Outlook is connected to Exchange. Fails when
Outlook is connected to Office365. Error:
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
Some research indicates that you need to release your objects
when making these calls in a loop. But I’m not in a loop. I
can’t even get one call to work, so I don’t get to the point
where I can release anything.
Testing with Wireshark and Charles indicates that the problem is
in the client. I was trying to see if there is a more detailed
error coming from the server, but there’s no traffic to the server
at all.
A quick Python script works from the command line.
import win32com.client
outlook = win32com.client.Dispatch('Outlook.Application')
mail = outlook.CreateItem(win32com.client.constants.olMailItem)
mail.Save()
mail.Display(False)
So it must be something in the client. I’m guessing maybe thread-related?
This can happen if you haven’t activated Microsoft Office (which includes Outlook).
Short, test add-ins can work if they run right away before the activation check happens.
Once the activation check happens the API calls will fail.