C# Outlook互操作-邮件项目。发件人挂起\冻结

C# Outlook互操作-邮件项目。发件人挂起\冻结,c#,outlook,office-interop,com-interop,outlook-2010,C#,Outlook,Office Interop,Com Interop,Outlook 2010,我使用下面msdn链接中的代码,它在我的系统中运行良好,可以获取发件人电子邮件地址。但是,当我将相同的代码部署到我们的一个开发服务器时,下面的代码行将无限期挂起\freeze而没有任何响应。跟踪之后,我发现如果访问了发送方对象的属性,它将永远挂起。邮箱中的缓存交换模式已“打开”,并且它正在outlook 2010中运行。我还从outlook手动下载了地址簿,但没有帮助。我相信这不是一个代码问题。有人能帮忙吗 sender.AddressEntryUserType==Outlook.OlAddr

我使用下面msdn链接中的代码,它在我的系统中运行良好,可以获取发件人电子邮件地址。但是,当我将相同的代码部署到我们的一个开发服务器时,下面的代码行将无限期挂起\freeze而没有任何响应。跟踪之后,我发现如果访问了发送方对象的属性,它将永远挂起。邮箱中的缓存交换模式已“打开”,并且它正在outlook 2010中运行。我还从outlook手动下载了地址簿,但没有帮助。我相信这不是一个代码问题。有人能帮忙吗

sender.AddressEntryUserType==Outlook.OlAddressEntryUserType。 olExchangeUserAddressEntry ||sender.AddressEntryUserType== Outlook.OlAddressEntryUserType。
olExchangeRemoteUserAddressEntry

您不能在服务中使用Outlook。服务中不能使用Office应用程序(包括Outlook)


您可以选择扩展MAPI(C++或Delphi),(它包装扩展MAPI,可以从任何语言使用),或

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

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

Outlook所基于的低级API支持从服务运行代码。您可以使用任何语言来实现该任务(C#和VB.NET)。但微软并不正式支持此类解决方案/代码。如果你面对任何问题,你都会感到孤独,但是托管代码很有魅力


另请参见。

您可以在同一台机器上手动双击Outlook中该项目的发件人并查看详细信息吗?@Dmitry是的,我可以查看这些详细信息。在同一台机器上,对吗?@DmitryStreblechenko YesAre您是作为GUI应用程序还是服务运行的?但同一个服务(它是WCF web服务)如何在我的本地IIS 7中运行,从我的outlook邮箱阅读电子邮件?仅在本地服务上使用office outlook interop api而不是在Windows Server 2012之类的环境中使用有限制吗?这就是在服务中使用office应用程序的问题所在-它们在您的开发环境中运行良好,但在最不合适的时刻以非常惊人的方式失败,当您向上司演示代码时或在生产中部署后。我可以访问邮件项目中的附件并成功地将其保存在开发服务器中。但是MailItem中的其他属性很少,例如MailItem.Recipients、MailItem.Sender、MailItem.SentOn等。。在服务中运行Outlook时,失败是没有原因的。不要试图让它工作,它以后仍然会失败。我用redemption替换了所有互操作api调用,并且它在开发服务器上正常工作。谢谢你!感谢Eugene提供MSDN的链接,非常有用。我已决定继续兑换,因为用户登录需要在exchange服务器上具有特殊访问权限才能使用EWS api。