我无法使用 smtp 客户端发送邮件。 这是代码:
SmtpClient client=new SmtpClient("Host");
client.Credentials=new NetworkCredential("username", "password");
MailMessage mailMessage = new MailMessage();
mailMessage.from="sender@gmail.com";
mailMessage.To.Add("recipient@gmail.com");
mailMessage.body="body";
mailMessage.subject="subject";
client.Send(mailMessage);
问题是当我在 ASP.NET 应用程序中使用这段代码时,我没有收到任何邮件。在 asp.net 中,我将发件人邮件地址更改为 NetworkCredential 中给出的用户名时,我收到了邮件。
但在 C# windows 应用程序中,我可以收到电子邮件,即使发件人的电子邮件地址无效。
最佳答案
我发现在设置 <html><span class="diff-delete">UseDefaultCredentials = false</span></html>
之前设置 SmtpClient Credentials 属性. UseDefaultCredentials = false
导致凭据被忽略。
失败:
SmtpClient smtp = new SmtpClient;
smtp.Credentials = new NetworkCredential("user","pass");
smtp.UseDefaultCredentials = false;
作品:
SmtpClient smtp = new SmtpClient;
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("user","pass");
去图吧。
**更新**
这里顺序很重要的原因是 UseDefaultCredentials
上的 setter 属性实际上设置了 Credentials
至 null
通过反编译代码:
/// <summary>Gets or sets a <see cref="T:System.Boolean" /> value that controls whether the <see cref="P:System.Net.CredentialCache.DefaultCredentials" /> are sent with requests.</summary>
/// <returns>
/// <see langword="true" /> if the default credentials are used; otherwise <see langword="false" />. The default value is <see langword="false" />.</returns>
/// <exception cref="T:System.InvalidOperationException">You cannot change the value of this property when an e-mail is being sent.</exception>
public bool UseDefaultCredentials
{
get
{
return this.transport.Credentials is SystemNetworkCredential;
}
set
{
if (this.InCall)
throw new InvalidOperationException(SR.GetString("SmtpInvalidOperationDuringSend"));
this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;
}
}
关于c# - 在 .net 中使用 SmtpClient 发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2470645/