3

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'

どこで/どのようにデバッグを開始しますか?

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クライアントを見つける必要があります。.NETFrameworkにはありませんが、「。NET SOCKSプロキシ」をグーグルで検索すると、見つけることができるはずです。

ただし、ネットワークでSOCKSプロキシが実行されている可能性はかなり低いため、これをあきらめてローカルSMTPサーバーを使用する必要があるかもしれません。

于 2010-04-15T05:24:23.370 に答える