【发布时间】:2018-07-19 08:58:58
【问题描述】:
我们在 IIS 服务器上托管了一个 .net 应用程序。 此应用程序尝试从当前登录用户的 Outlook 中读取电子邮件。
我正在使用库using Microsoft.Office.Interop.Outlook;,下面是我的代码。
当这段代码从我的 VS 运行时,我可以查看电子邮件。 当我在 IIS 上部署此应用程序时,我无法阅读任何电子邮件。
这是记录的错误。
由于以下错误,检索具有 CLSID {0006F03A-0000-0000-C000-000000000046} 的组件的 COM 类工厂失败:80070005 访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。
我是否遵循正确的方法来访问电子邮件,或者是否有任何不同的方法来存档?请赐教。
下面是整个代码。
try
{
outlookApplication = new Application();
outlookNamespace = outlookApplication.GetNamespace("MAPI");
inboxFolder = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
mailItems = inboxFolder.Items;
foreach (object item in inboxFolder.Items)
{
if (item is Microsoft.Office.Interop.Outlook.MailItem)
{
Microsoft.Office.Interop.Outlook.MailItem mailitem = (Microsoft.Office.Interop.Outlook.MailItem)item;
if(mailitem.ReceivedTime.Date ==DateTime.Today)
{
TempEmail objTempEmail = new TempEmail();
objTempEmail.From = mailitem.SenderEmailAddress;
objTempEmail.To = mailitem.To;
objTempEmail.CC = mailitem.CC;
objTempEmail.Subject = mailitem.Subject;
objTempEmail.Body = mailitem.Body;
lTempEmail.Add(objTempEmail);
Marshal.ReleaseComObject(mailitem);
}
}
}
}
catch (System.Exception ex)
{
log.Error(ex.Message + "" + ex.InnerException);
}
finally
{
ReleaseComObject(mailItems);
ReleaseComObject(inboxFolder);
ReleaseComObject(outlookNamespace);
ReleaseComObject(outlookApplication);
}
【问题讨论】:
-
'inboxFolder' 将指向托管 IIS 的本地计算机上的文件夹,而不是登录的用户文件夹,除非您遗漏了一些代码
-
您无法访问客户端设备上的数据!
-
您可能需要考虑交换 Web 服务而不是 Outlook 互操作,您需要直接与使用当前用户凭据进行身份验证的交换服务器对话。
-
@StephenMuecke 注明。
-
@Charleh 将对此进行研究。谢谢
标签: c# .net asp.net-mvc iis office-interop