.net - 使用 CredentialCache.DefaultNetworkCredentials 代表当前用户发送电子邮件

标签 .net vb.net exchange-server kerberos exchangewebservices

存在什么 :
一个 Web 应用程序,允许用户创建约会、输入所需的与会者并发送约会请求。

我想要发生的事情:
我的网络应用程序通过 EWS 向多个收件人发送约会请求(代表正在使用网络应用程序的用户) .避免 EWS 的模拟选项

我试过的:

Dim service As New ExchangeService(TimeZoneInfo.FindSystemTimeZoneById(sNewEmpTZ))
service.Url = New Uri("https://exchange.url")

Dim cred As NetworkCredential = CredentialCache.DefaultNetworkCredentials

service.Credentials = cred

Dim app As Appointment = New Appointment(service)
'build required body, subject, attendees, location, time, date etc.

app.Save(SendInvitationsMode.SendToAllAndSaveCopy)

发生了什么:
当我通过本地主机运行此应用程序时,它可以完美运行 - 将获取当前用户(我)下的缓存凭据并发送约会请求。当我将此代码推出到我们的开发服务器时,在代码尝试发送约会 (app.Save(...)) 后,我收到以下错误消息:Error: When making a request as an account that does not have a mailbox, you must specify the mailbox primary SMTP address for any distinguished folder Ids.这告诉我代码无法获取当前用户的凭据。 备注 :我们的开发服务器使用 Kerberos 进行身份验证,这就是我认为代码应该可以工作的原因。

我研究过的:
过去两天我一直在查看此错误消息,但我一直无法找到有解决方案的类似情况。

我还尝试了什么:
我知道CredentialCache.DefaultCredentials本质上是等效的,所以我确实尝试过
Dim service As New ExchangeService(TimeZoneInfo.FindSystemTimeZoneById(sNewEmpTZ))
service.Url = New Uri("https://exchange.url")

Dim cred As ICredentials = CredentialCache.DefaultCredentials

service.Credentials = cred

Dim app As Appointment = New Appointment(service)
'build required body, subject, attendees, location, time, date etc.

app.Save(SendInvitationsMode.SendToAllAndSaveCopy)

但是本地和开发人员都会收到以下错误:Unable to cast object of type 'System.Net.SystemNetworkCredential' to type 'Microsoft.Exchange.WebServices.Data.ExchangeCredentials'.
我的问题:

知道我们的开发服务器设置为使用 Kerberos 协议(protocol),并且用户是 windows 认证的,为什么不 CredentialCache.DefaultNetworkCredentials能够收集当前用户的凭据吗?

免责声明:
我对 Windows 身份验证的实际工作方式非常陌生。此外,在发布类似的堆栈溢出问题之前,我已经查看了以下两个似乎与我的问题最相关的问题。
  • http://stackoverflow.com/questions/12851705/ad-user-authentication
  • http://stackoverflow.com/questions/949340/getting-networkcredential-for-current-user-c
  • 最佳答案

    只是一个猜测,但您是否尝试过 ASP.Net Impersonation打开?

    关于.net - 使用 CredentialCache.DefaultNetworkCredentials 代表当前用户发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19640221/

    相关文章:

    exchange-server - Outlook.com 是否支持 EWS?

    c++ - 如何找出信息存储的可分辨名称以提供给 IExchangeManageStore::GetMailboxTable?

    python - 如何使用 Python 通过 Microsoft Exchange Web 服务 API 发送电子邮件

    .net - Azure 应用服务和 .NET Framework 4.8 版本

    javascript - 如何在asp.net上压缩数据并在javascript中解压缩

    asp.net - .net 4.5 iis 高密度网络托管

    mysql - 在 Windows 中使用 VB.NEt 2005 使用拨号连接连接到 MySQL 服务器的最佳方式

    vb.net - Visual Basic InputBox关闭错误

    c# - 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    c# - 使用 Fluent NHibernate 执行 Sql 语句