InvalidCastException – 无法转换types为“Microsoft.Office.Interop.Outlook.ApplicationClass”的COM对象

我已经编写了这个代码,使用我的.net应用程序的Outlook发送附件,这里是代码:

Microsoft.Office.Interop.Outlook.Application outlook = new Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook.Application session = new Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook.NameSpace ns = outlook.Session; Outlook.MailItem mail = outlook.Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; mail.Subject = txtSubject.Text; mail.To = txtTo.Text; mail.Subject = txtSubject.Text; mail.Body = txtBody.Text; mail.Attachments.Add(@"c:\Users\admin\Desktop\Excel.txt", Outlook.OlAttachmentType.olByValue, Type.Missing, Type.Missing); Outlook.Accounts accounts = outlook.Session.Accounts; foreach (Outlook.Account account in accounts) { // When the e-mail address matches, send the mail. if (string.Equals(account.SmtpAddress, txtFrom.Text, StringComparison.OrdinalIgnoreCase)) { mail.SendUsingAccount = account; mail.Save(); ((Outlook._MailItem)outlook).Send(); lblStatus.Text = "Report Sent"; break; } } 

但是当它到达Send()方法调用时,我得到这个错误:

 Unable to cast COM object of type 'Microsoft.Office.Interop.Outlook.ApplicationClass' 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)). 

你正在投下错误的对象

outlook被定义为Microsoft.Office.Interop.Outlook.Application

你需要改变

 ((Outlook._MailItem)outlook).Send(); 

至:

 ((Outlook._MailItem)mail).Send(); 

参考