编程生成Outlook电子邮件

本文关键字:电子邮件 Outlook 编程 | 更新日期: 2023-09-27 18:09:07

我正在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拒绝访问。(Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))。"}

编程生成Outlook电子邮件

当引用的dll或此dll的依赖项未正确安装时,您发布的异常将被抛出。

在这种情况下,似乎outlook或office没有使用您引用的正确版本,在您的测试机器上?

不能作为评论发布

我想知道你为什么更喜欢使用Outlook Interop?如果我想让我的程序在用户当前的电子邮件客户端上发送电子邮件,我使用mailto://协议,尽管我在WinForms上使用它。

像http://www.rapidtables.com/web/html/mailto.htm

Outlook,就像任何Office应用程序一样,不能从服务(如IIS)中使用。即使你使它工作,新的消息窗口将显示在服务器上,用户无论如何也不会看到它。

你可以试着运行一个客户端 javascript代码,但是你只能使用IE浏览器,Outlook需要在本地安装,而且你的站点必须被信任才能在脚本中创建COM对象。

微软目前不建议,也不支持,从任何无人值守的、非交互式的客户端应用程序或组件(包括ASP、ASP、ASP、ASP和ASP. xml)自动化Microsoft Office应用程序。. NET、DCOM和NT服务),因为在此环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁。

如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用那些对于无人值守执行是安全的组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果从服务器端解决方案使用Office应用程序,则该应用程序将缺乏成功运行所需的许多功能。此外,您将在整个解决方案的稳定性方面承担风险。请参阅Office服务器端自动化的注意事项一文了解更多信息。

考虑在ASP.NET中使用System.Net.Mail命名空间创建和发送电子邮件。