Unable to cast COM object - Microsoft outlook & C#
Solution 1
I had to get around something like your problem a while back.
foreach (Object _obj in _explorer.CurrentFolder.Items)
{
if (_obj is MailItem)
{
MyMailHandler((MailItem)_obj);
}
}
Hope that helps.
The issue here is that _explorer.CurrentFolder.Items
can contain more objects than just MailItem
(PostItem
being one of them).
Solution 2
try to check the item is a valid mailitem
before checking its properties :
foreach (Object mail in items)
{
if ((mail as Outlook.MailItem)!=null && (mail as Outlook.MailItem).UnRead == true)
{
MessageBox.Show((mail as Outlook.MailItem).Subject.ToString());
}
}
Solution 3
The following code worked fine when I tested it. But I must mention that my reference was to "Microsoft Outlook 14.0 Object Library". Do you happen to use another version?
public class Outlook { readonly Microsoft.Office.Interop.Outlook.Items _items; readonly Microsoft.Office.Interop.Outlook.NameSpace _ns; readonly Microsoft.Office.Interop.Outlook.MAPIFolder _inbox; readonly Microsoft.Office.Interop.Outlook.Application _application = new Microsoft.Office.Interop.Outlook.Application(); public Outlook() { _ns = _application.Session; _inbox = _ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); _items = _inbox.Items; foreach (var item in _items) { string subject= string.Empty; var mail = item as Microsoft.Office.Interop.Outlook.MailItem; if (mail != null) var subject = mail.Subject; else Debug.WriteLine("Item is not a MailItem"); } } }
Please note that in Outlook, many items have some common properties (e.g. expiration time), so you can, as a desperate workaround, use a "dynamic" datatype - either as a fallback scenario for unknown item types or as your default (as long as you're fine with the performance hit).
Solution 4
Nice! adapted the solution a bit, this worked well for me
foreach (dynamic item in mailItems)
{
if (item is MailItem)
{
Response.Write("Sender: ");
Response.Write(item.SenderEmailAddress);
Response.Write(" - To:");
Response.Write(item.To);
Response.Write("<br>");
}
}
Related videos on Youtube
Comments
-
Zerotoinfinity over 3 years
I have written this code to view the unread items in my outlook mail box and here is the code:
Microsoft.Office.Interop.Outlook.Application app; Microsoft.Office.Interop.Outlook.Items items; Microsoft.Office.Interop.Outlook.NameSpace ns; Microsoft.Office.Interop.Outlook.MAPIFolder inbox; Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application(); app = application; ns = application.Session; inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); items = inbox.Items; foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items) { if (mail.UnRead == true) { MessageBox.Show(mail.Subject.ToString()); } }
but on the foreach loop I am getting this error:
"Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.MailItem'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063034-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))."
Can you please assist me how to resolve this error?
-
Zerotoinfinity over 13 years@Bolu No, this is what I am writing in my c# Windows application
-
user1703401 over 13 yearsMAPIFolder is deprecated, use Folder instead.
-
Anders Arpi over 13 yearsDid you manage to figure this problem out?
-
YuriG over 9 yearsThis error is consistent with changing Office version. (it creates a whole family of problems) What needs to be done is to edit some registry files as described here: stackoverflow.com/questions/12957595/…
-
-
Zerotoinfinity over 13 yearsI tried the same and I got this message: Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Outlook.PostItem'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00063024-0000-0000-C000-000000000046}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
-
Meer almost 8 yearsi am getting the same error on following line Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
-
Ben over 6 yearsThis worked for me with Outlook 2016, with the latest Microsoft.Office.Interop.Outlook.dll
-
Dmitry Streblechenko over 5 yearsAre you accessing OOM from a service (IIS)? Don't do that.