3

试图在我的 C# 应用程序中发送一些电子邮件。我在代理后面 - 这无疑是代码不起作用的原因。这是我到目前为止所拥有的:

应用程序配置

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

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

4

2 回答 2

8

要调试任何涉及客户端服务器的东西,telnet 是您的朋友。

尝试进入 DOS 并输入:

  telnet smtp.gmail.com 587

你应该看到:

  220 mx.google.com ESMTP 20sm950596pzk.3

如果你不这样做(你得到一个“无法连接”或类似的东西),你肯定被阻止了。

如果您没有安装 telnet,您可以从“windows 组件”下的添加/删除程序中安装它。

于 2010-04-15T05:36:57.877 回答
3

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

不过,您的网络不太可能运行 SOCKS 代理,因此您可能不得不放弃这一点,而只使用本地 SMTP 服务器。

于 2010-04-15T05:24:23.370 回答