我需要通过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