System.Net.Mail.SmtpClient - 客户端没有作为此发件人发送的权限



我需要通过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 下的 SMTP 服务器名称 (mailsettings->smtp)

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

您是否在 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

最新更新