【问题标题】:C# sending email failuresC# 发送电子邮件失败
【发布时间】:2016-07-26 21:58:16
【问题描述】:

我正在尝试使用 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# 代码,写在整个网络上,在每个论坛中......但它对我没有帮助。

【问题讨论】:

  • 你必须指定一个不同的端口
  • 您的代码对我来说很好用。您不需要按照建议更改端口。今天早上 GMail 可能出现的服务器问题?再试一次。外发邮件 (SMTP) 服务器:smtp.gmail.com - 使用身份验证:是 - SSL 端口:465 或 587
  • 如果您使用的是家庭互联网,一些提供商对开放的端口非常严格。

标签: c# email gmail sendmail send


【解决方案1】:

我能想到的唯一原因是您的网络(软件或硬件防火墙、路由器或调制解调器)阻止了 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 标志实际上可能会导致登录问题,如果您在设置 Credentials 之后设置它(您没有完成并且不会 成为您当前的问题)。只有当您已将应用的(配置)默认交付方式更改为 SmtpDeliveryMethod.Network 时,才需要 DeliveryMethod

【讨论】:

    【解决方案2】:

    我可以在这里想到 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>
    

    【讨论】:

    • 我为投反对票道歉。我有点卡,不小心撞到了,直到现在才注意到。
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多