我在asp.net c#中创建一个按钮,单击该按钮将打开Outlook窗口。
我正在引用Microsoft.Office.Interop.Outlook dll,并在using语句中使用它:
using Outlook = Microsoft.Office.Interop.Outlook;
这是代码。
private void CreateMailItem()
{
try
{
var outlookApp = new Outlook.Application();
var mailItem = (Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);
//var mailItem = (Outlook.MailItem)
// Application.CreateItem(Outlook.OlItemType.olMailItem);
mailItem.Subject = "This is the subject";
mailItem.To = "someone@example.com";
mailItem.Body = "This is the message.";
mailItem.Importance = Outlook.OlImportance.olImportanceLow;
mailItem.Display(false);
}
catch (Exception)
{
throw;
}
}
我在第一行var outlookApp = new Outlook.Application();
收到错误
例外情况说:
{"由于以下错误,检索CLSID为{0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005访问被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))。"}
答案 0 :(得分:0)
如果未正确安装此dll的引用dll或相关内容,则会引发您发布的异常。
在这种情况下,您的测试计算机上的Outlook或Office似乎没有您引用的正确版本?
答案 1 :(得分:0)
无法发布此评论。
我想知道您为什么更喜欢使用Outlook Interop? 我正在使用mailto://协议,如果我希望我的程序在用户当前的电子邮件客户端上发送电子邮件,尽管我在WinForms上使用它。
答案 2 :(得分:0)
Outlook,就像任何Office应用程序一样,无法从服务(例如IIS)中使用。即使您确实使其正常工作,新的消息窗口也会显示在用户无法看到的服务器上。
您可以尝试运行客户端 JavaScritp代码,但之后您将仅限于IE,Outlook需要在本地安装,并且您的网站必须信任才能够在脚本中创建COM对象。
答案 3 :(得分:0)
Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office可能会出现不稳定Office在此环境中运行时的行为和/或死锁。
如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。
考虑使用System.Net.Mail命名空间在ASP.NET中创建和发送电子邮件。