c# - 在 .net 中使用 SmtpClient 发送邮件

标签 c# .net asp.net smtpclient

我无法使用 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 属性实际上设置了 Credentialsnull通过反编译代码:

/// <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/

相关文章:

c# - 为什么 FtpWebRequest 会为此现有目录返回一个空流?

c# - xml序列化和编码

asp.net - ASP.NET 解决方案的典型结构?

c# - 如何解析 HTML 节点的属性

c# - 'await Task.Delay(1000)' 会阻塞任何线程吗?

c# - 如何使用 WebRequest 发布数据并从网页获取响应

c# - 如何使用其应用程序打开文件(该文件不存在于网络服务器中)?

c# - 从交换服务器检索用户的详细信息

当 UserControl 使用 Ajax 加载时,Javascript 代码不起作用

asp.net - 使用 ASP.NET Core 同时运行 REST API 和 gRPC