通过asp.net发送outlook约会错误HRESULT:0x80004004

通过asp.net发送outlook约会错误HRESULT:0x80004004,outlook,Outlook,我正在尝试通过代码发送outlook约会。我的代码贴在下面。当我使用IIS 6和域帐户标识下的应用程序池在服务器上运行它时,它会抛出此错误。我尝试过在服务器上更改各种设置,但都不起作用。Outlook 2007已安装。我甚至让这个域帐户成为本地管理员。请帮忙 描述:未处理的异常 在执行过程中发生 当前web请求。请检查 有关堆栈跟踪的详细信息,请参阅 错误及其来源 密码 例外情况详情: System.Runtime.InteropServices.COMException: 操作已中止(来自的异

我正在尝试通过代码发送outlook约会。我的代码贴在下面。当我使用IIS 6和域帐户标识下的应用程序池在服务器上运行它时,它会抛出此错误。我尝试过在服务器上更改各种设置,但都不起作用。Outlook 2007已安装。我甚至让这个域帐户成为本地管理员。请帮忙

描述:未处理的异常 在执行过程中发生 当前web请求。请检查 有关堆栈跟踪的详细信息,请参阅 错误及其来源 密码

例外情况详情: System.Runtime.InteropServices.COMException: 操作已中止(来自的异常) HRESULT:0x80004004(E_中止))

第201行:objAppt.Send()

代码如下:

Microsoft.Office.Interop.Outlook.Application objOL 
    = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.AppointmentItem objAppt 
    = (Microsoft.Office.Interop.Outlook.AppointmentItem)objOL
        .CreateItem
            (Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);
objAppt.Start = startTime;//datetime
objAppt.End = endTime;//datetime
objAppt.Subject = subject;
objAppt.Body = body;
objAppt.Location = location;
objAppt.MeetingStatus 
    = Microsoft.Office.Interop.Outlook.OlMeetingStatus.olMeeting;
objAppt.RequiredAttendees = "test@test.com";
objAppt.Send();
objAppt = null;
objOL = null;

很简单,你不应该这样做。不建议在服务器环境中运行Office,因为Office具有线程(和桌面会话)要求

您正在尝试在Exchange服务器上执行此操作吗?如果是这样,那么我将直接与Exchange服务器交互(可能使用WebDAV?)


如果未与Exchange连接,请查看活动邀请的标题。邀请应该是带有自定义标题信息的普通电子邮件。

是的,正如casperOne所说,我不会在服务器上使用outlook。我会使用CDO或RDO(redemeption)来实现这一点。甚至可以使用vcal并通过system.Net.Mail发送vcal

更新: 看看

向您展示如何使用RDO完成您想要做的事情。您也可以对CDO执行同样的操作。退房
您必须构建登录详细信息,因为您所在的服务器没有Outlook配置文件(如果您删除了allready上的配置文件)

我猜您无法从IIS应用程序中使用Outlook的原因是,运行IIS应用程序的当前用户没有关联的Outlook配置文件


因此,您可以实例化Outlook对象并设置其属性,直到需要特定于配置文件的功能,例如Send()命令,该命令将把发送的邮件存储在用户/profile的(不存在的)pst文件中。

不要使用Outlook automation执行此操作

直接从马嘴里说:


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

如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用安全的组件来无人值守地执行。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果使用服务器端解决方案中的Office应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将面临整体解决方案稳定性方面的风险


在Outlook执行此任务时,请检查它发送的电子邮件标题,以了解如何执行此操作,并使用标准的.NET SmtpClient工具对其进行模拟。

否,它不是Exchange服务器。所以不建议在服务器上使用Office互操作对象?但我就是想不出如何让它工作…@汤姆:嗯,这只是一封附加了一些额外标题的电子邮件。发送一封给您自己,查看电子邮件中的标题,然后适当地复制这些标题。“Microsoft目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为在此环境中运行Office时,Office可能会表现出不稳定的行为和/或死锁。”