【问题标题】:System.Net.Mail.SmtpClient - Client does not have permission to send as this senderSystem.Net.Mail.SmtpClient - 客户端无权作为此发件人发送
【发布时间】:2017-01-06 17:48:42
【问题描述】:

我需要通过 Web 应用程序发送电子邮件,但电子邮件发送到的地址需要 SMTP 身份验证。该代码适用于不需要需要身份验证的邮箱。

我想传递 Windows 用户凭据(该站点使用 Windows 身份验证),并认为这可以通过我的代码实现,但不幸的是,我收到有关客户端无权发送的错误。我假设它使用的是应用程序池用户而不是登录用户的凭据。

Dim mailMessage As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage()
mailMessage.IsBodyHtml = True
Dim strBody As String = "<font size='2' font face='Tahoma'>" & _
"<br><br><b>Date: </b>" & Me.txtDate.Text
mailMessage.From = New System.Net.Mail.MailAddress(fromAddress) 'Logged in user's email address
' More code here to build the email body etc... 
' Then attempt to send it:
Dim smtpClient As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient
smtpClient.UseDefaultCredentials = True
smtpClient.Send(mailMessage)

Web.config 仅包含system.net (mailsettings->smtp) 下的 SMTP 服务器名称

如何让应用程序使用用户的凭据?

【问题讨论】:

  • WinForms? WPF? ASP.NET?
  • 对不起,它的asp.net!
  • 我对 ASP.NET 不太了解,但可能是因为后端代码运行在服务器端,因此使用了服务器的帐户凭据?还是应该是这样的?
  • 我认为您需要将凭据设置为CredentialCache.DefaultNetworkCredentials
  • 感谢 Andrew,看来这可能是正确的方法。我会在星期一试一试。

标签: asp.net vb.net email windows-authentication smtpclient


【解决方案1】:

您是否在 Web.config 中指定了 UseDefaultCredentials?如果不是,您必须这样做才能使用它们。这将允许当前登录的用户通过指定的 SMTP 服务器发送电子邮件。请注意,网站通常在单独的用户凭据下运行,而不是机器上当前登录的用户。

<system.net>
  <mailSettings>
    <smtp deliveryMethod="network">
      <network host="localhost" port="25" defaultCredentials="true" />
    </smtp>
  </mailSettings>
</system.net>

或者在代码中指定凭据。

smtpClient.Credentials = new NetworkCredential("fake@false.nl", "abcd1234");

如果两者都不起作用,则您根本无权在该服务器上发送邮件。

查看更多信息

https://msdn.microsoft.com/nl-nl/library/system.net.mail.smtpclient.usedefaultcredentials(v=vs.110).aspx

https://msdn.microsoft.com/nl-nl/library/w355a94k(v=vs.110).aspx

【讨论】:

  • 不,我没有把它放在 web.config 中。我会在星期一试一试。它在&lt;mailsettings&gt; 标签中吗?它确实需要作为登录用户而不是应用程序池用户发送。我们最近更改了我们的 Exchange 服务器,以便在向群组地址发送电子邮件时要求进行身份验证。对于通过 Outlook 发送电子邮件但显然在我的应用程序中不起作用的用户,一切正常
  • 如果是当前用户,那么它应该可以工作(如果 Exchange 服务器允许)
  • 我无法让它工作,因为我不知道用户的密码来创建NetworkCredential 的新实例。有什么方法可以通过 Windows 身份验证而不是手动指定它?
  • 是的,即使用defaultCredentials。不要使用new NetworkCredential 指定它们
猜你喜欢
  • 2011-11-08
  • 2017-10-30
  • 2015-06-23
  • 2015-02-05
  • 2018-01-13
  • 2017-05-26
  • 2011-11-08
  • 2015-08-16
  • 2018-03-02
相关资源
最近更新 更多