【问题标题】:Error in Sending Email via a SMTP Client通过 SMTP 客户端发送电子邮件时出错
【发布时间】:2013-09-30 01:36:23
【问题描述】:

这对你来说可能很简单,但我就是想不通为什么我在运行我的代码时会收到这个错误消息。我在同一个网站上查看了一些相关问题,例如Sending email through Gmail SMTP server with C# 但他们都没有帮助。请问有人愿意帮忙吗? 使用不同的组件也是可以接受的。因此,如果有人得到一个可行的解决方案,将不胜感激。

错误消息 = SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息,请访问

这是我的代码

System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();      
message.From = new MailAddress("bob@googlemail.com");
message.To.Add("bob@hotmail.com");
message.Subject = "Hello";
message.Body = "Hello Bob ";
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587);
smtpClient.EnableSsl = true;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential("MyGoogleMailAccount", 
                                               "mygooglemailpassword");

smtpClient.Send(message.From.ToString(), message.To.ToString(), 
                message.Subject, message.Body);   

【问题讨论】:

  • 顺便说一句,如果您使用来自地址的 hotmail,gmail 可能会抱怨。
  • 嗨,史蒂夫,我想使用 googlemail 来发送电子邮件,但它应该就像是从 hotmail 发送的一样。我在这里错过了什么吗?嗨皮特,我已经看到该链接没有解决我的问题
  • 这是一个非常复杂的问题,因为谷歌添加了一些安全层来防止黑客。登录您的谷歌帐户,您很可能会看到警报!如果是这样,请单击它并按照说明进行操作!
  • 您是否考虑使用另一个组件来完成相同的工作?在使用 System.Net.Mail 的许多解决方案失败后,我使用了另一个程序集并为我解决了这个问题。如果你想要它,请编辑你的问题并指定其他组件是可以接受的。

标签: c# .net web smtp smtpclient


【解决方案1】:

除了电子邮件地址之外,我认为您的代码没有任何问题。我使用此代码成功地将一封电子邮件从 gmail 发送到我的个人帐户(实际上是在 LINQPad 中运行它)。只需将 3 个字符串值替换为您帐户的有效值即可:

MailMessage message = new System.Net.Mail.MailMessage(); 
string fromEmail = "myaddr@gmail.com";
string fromPW = "mypw";
string toEmail = "recipient@receiver.com";
message.From = new MailAddress(fromEmail);
message.To.Add(toEmail);
message.Subject = "Hello";
message.Body = "Hello Bob ";
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

using(SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", 587))
{
    smtpClient.EnableSsl = true;
    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
    smtpClient.UseDefaultCredentials = false;
    smtpClient.Credentials = new NetworkCredential(fromEmail, fromPW);

    smtpClient.Send(message.From.ToString(), message.To.ToString(), 
                    message.Subject, message.Body);   
}

【讨论】:

  • 嗨皮特。我认为这可能是一些防火墙问题或与我的 googlemail 用户名和密码有关。
  • 您确定您使用的是正确的帐户和密码吗?我认为如果它被防火墙阻止,您将不会收到回复。
  • 尝试使用端口 465。
  • 还要验证一下,您是否复制并粘贴了我的代码并进行了更改(而不是修改现有代码)?在设置凭据之前设置UseCredentials = false 很重要。否则它将清除您的凭据。事实上,您可能会在 Send() 之前验证调试器中的凭据。
  • SmtpClient 应该包含在 using 指令中,以便及时处理。
【解决方案2】:

this post.

MailMessage mail = new MailMessage("you@yourcompany.com", "user@hotmail.com");
SmtpClient client = new SmtpClient();
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "smtp.google.com";
mail.Subject = "this is a test email.";
mail.Body = "this is my test email body";
client.Send(mail);

【讨论】:

  • 这会报错说“{”远程名称无法解析:'smtp.google.com'”}
  • 如果您将其更改为 smtp.gmail.com(使用 googlemail 凭据)或 smtp.live.com(使用 hotmail 凭据),那么这将正常工作:)
猜你喜欢
  • 2015-02-21
  • 1970-01-01
  • 2022-01-13
  • 2014-01-04
  • 1970-01-01
  • 2020-12-22
  • 2013-03-12
  • 1970-01-01
相关资源
最近更新 更多