【发布时间】:2021-04-06 21:44:31
【问题描述】:
我之前使用以下代码和参考来创建给用户的电子邮件,并在发送之前弹出一个 Outlook 消息窗口,以允许用户在发送之前对电子邮件进行更改...
参考
using Outlook = Microsoft.Office.Interop.Outlook; //v15.0.0.0
片段
public static void SendEmail(string To, string CC, string Subject, string Body)
{
Outlook.Application app = new Outlook.Application();
Outlook.MailItem mail = (Outlook.MailItem)app.CreateItem(Outlook.OlItemType.olMailItem);
mail.Subject = Subject;
mail.To = To;
mail.CC = CC;
mail.Body = Body;
mail.Subject = Subject;
if (DisplayToUser) { mail.Display(true); } //<< Important
else { mail.Send(); }
}
最近在一些公司更新(升级 Outlook)之后,此代码不再有效。我收到以下错误:
System.InvalidCastException:无法转换类型的 COM 对象 'Microsoft.Office.Interop.Outlook.ApplicationClass' 到接口类型 'Microsoft.Office.Interop.Outlook._Application'。此操作失败 因为接口的 COM 组件上的 QueryInterface 调用 使用 IID '{00063001-0000-0000-C000-000000000046}' 失败,因为 以下错误:找不到元素。 (HRESULT 的例外情况: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))。在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(对象 objSrc,IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) 在 Microsoft.Office.Interop.Outlook.ApplicationClass.CreateItem(OlItemType ItemType) 在 MyCompany.MyApp.Classes.Email.SendEmail(String To, String CC, String Subject, String Body, Boolean DisplayToUser, 布尔 CcUser) 在 C:_data\MyCompany.MyApp\SourceCode-Dev\MyCompany.MyApp\Classes\Email.cs:line 17 在 MyCompany.MyApp.Forms.FrmAbout.btnCommunicate_Click(对象 发件人,EventArgs e) ......
我在 Google 上四处搜索,发现了很多关于如何通过 Outlook 发送 SMTP 电子邮件的示例,但是,似乎没有一个示例可以让我像以前那样连接到 Outlook 应用程序本身向用户显示电子邮件。
我还研究了 Microsoft.Office365.OutlookServices NuGet 包,但没有找到类似的功能。
我从代码发送电子邮件没有问题,问题是无法使用已安装的 Outlook 应用程序向用户显示 Outlook 消息窗口。
知道这个功能是否仍然存在,如果存在,在哪个库中找到它,或者如何取回它?
谢谢
【问题讨论】:
-
根据我使用 MS Office
Interop的经验,如果更新了办公套件,那么使用Interop的代码也必须参考“更新的”库重新编译。如果代码没有重新编译,那么它将尝试使用以前的(未更新的)库,这显然可能会导致一些问题。在您当前的代码中……您是否已转储/删除了当前的“互操作”引用,然后将“互操作”引用重新添加到新库,然后重新编译了代码?