使用gmail smtp通过代理发送电子邮件

时间:2010-04-15 05:16:21

标签: c# proxy gmail send smtpclient

尝试在我的C#应用​​中发送一些电子邮件。我支持代理 - 这无疑是代码无效的原因。这就是我到目前为止所做的:

App.Config中

<system.net>
    <defaultProxy enabled="false">
      <proxy proxyaddress="xxx.xxx.xxx.xxx"/>
    </defaultProxy>
    <mailSettings>
      <smtp deliveryMethod="Network">
        <network host="smtp.gmail.com" port="587"/>
      </smtp>
    </mailSettings>
  </system.net>

代码

        var username = "...";
        var password = "...";

        var fromEmail = "...";
        var toEmail = "...";
        var body = "Test email body";
        var subject = "Test Subject Email";

        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential(username, password),
            EnableSsl = true
        };

        try
        {
            client.Send(fromEmail, toEmail, subject, body);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }  

每次我收到System.Net.WebException:无法解析远程名称:'smtp.gmail.com'

我在哪里/如何开始调试?

2 个答案:

答案 0 :(得分:8)

要调试涉及客户端服务器的任何内容,telnet就是你的朋友。

尝试删除DOS并输入:

  telnet smtp.gmail.com 587

您应该看到:

  220 mx.google.com ESMTP 20sm950596pzk.3

如果你没有(你得到一个“无法连接”或其他一些),你肯定会被阻止。

如果您没有安装telnet,可以在'windows components'下的添加/删除程序中安装telnet。

答案 1 :(得分:3)

你是正确的,在代理后面会阻止你的代码工作。解决方案并非如此简单。没有我所知道的标准“SMTP代理”(有HTTP代理的方式)。你必须使用SOCKS代理并为它找到一些.NET客户端 - 在.NET框架中没有一个,但如果你谷歌“.NET SOCKS代理”,你应该能找到一个。

但是,您的网络运行SOCKS代理的可能性相当小,所以您可能不得不放弃这一点,只需使用本地SMTP服务器。