C#发送电子邮件失败

时间:2016-04-06 13:08:05

标签: c# email gmail sendmail send

我尝试使用C#控制台发送电子邮件,但每次都失败并显示错误:

Failure sending mail. ---> System.Net.WebException: Unable to connect to the remote server ---> System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions 173.194.65.109:587

这是我的C#代码:

SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = true;
client.Host = "smtp.gmail.com";
client.Port = 587;

// setup Smtp authentication
System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("myEmail@gmail.com", "myPassword");
client.UseDefaultCredentials = false;
client.Credentials = credentials;

MailMessage msg = new MailMessage();
msg.From = new MailAddress("myEmail@gmail.com");
msg.To.Add(new MailAddress("destinationEmail@gmail.com"));

msg.Subject = "This is a test Email subject";
msg.IsBodyHtml = true;
msg.Body = string.Format("<html><head></head><body><b>Test HTML Email</b></body>");
client.Send(msg);

我也尝试过使用:

client.UseDefaultCredentials = true;

但仍未成功。

这是一个通用的C#代码,写在每个论坛的网络上......但它对我没有帮助。

2 个答案:

答案 0 :(得分:0)

我可以在这里想到2个问题。 第一个端口587没有打开,这是非常不可能的,因为它是邮件的标准端口,但你永远不知道。

第二,你的代码看起来很好,但你可能忘记了app.config文件中的一些部分。我怀疑这样的事情。

 <system.net>
  <mailSettings>
    <smtp>
      <network host="mail.OurOrganisationEmail@ourdomain.com" port="9999" userName="OurOrganisationEmail@ourdomain.com" password="OurOrganisationEmailPassword"/>
    </smtp>
  </mailSettings>
</system.net>

答案 1 :(得分:0)

我能想到的唯一原因是你的网络(软件或硬件防火墙,路由器或调制解调器)阻止587或GMail服务器上的传出流量昨天出现问题。但是,587是一个标准的SMTP SSL端口,并没有看到它被阻止的原因,因为MS Outlook等电子邮件客户端也会使用它。否则,你的代码很好(我的办公室测试正常)。你是对的,这是通过.net的SmtpClient发送电子邮件的标准代码。您可能想尝试使用GMail的端口465(非标准,但有时因遗留原因而使用),而不仅仅是为了了解您是否可以使用它。

GMail支持(https://support.google.com/mail/troubleshooter/1668960?hl=en&rd=1) -

  

外发邮件(SMTP)服务器:
  smtp.gmail.com
  使用身份验证:是
  SSL端口:465或587

仅供参考,您可以放弃两者:

  

client.DeliveryMethod = SmtpDeliveryMethod.Network;
  client.UseDefaultCredentials = false;

SMTP到GMail不需要它们。 UseDefaultCredentials 标志实际上可能会导致登录问题,如果您在设置凭据后设置了 不会< / strong>是你当前的问题)。如果您已将应用的(配置)默认投放方式设置为 SmtpDeliveryMethod.Network ,则只需要 DeliveryMethod