3

以下のコードを使用して gmail 経由でメールを送信しようとしていますが、「リモート ホストに接続できません」というエラーが表示され続けます。構成を再確認しましたが、すべて問題ないようです。私が見逃しているものを見た人はいますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SmtpClient client = new SmtpClient();
            client.UseDefaultCredentials = false;
            client.Credentials = new NetworkCredential("mymail@gmail.com", "mypass");
            client.Port = 587;
            client.Host = "smtp.gmail.com";
            client.EnableSsl = true;
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("mymail@gmail.com");
            mail.To.Add("tomail@tomail.org");
            mail.Subject = "subject thing";
            mail.Body = "dubbly doo";
            try
            {
                client.Send(mail);
            }
            catch(SmtpException e)
            {
                Console.Write(e.InnerException.Message);
                Console.ReadLine();
            }
        }
    }
}
4

3 に答える 3

8

指定したホストとポートへの到達に問題がある可能性が最も高いです。これにはさまざまな原因が考えられますが、そのうちの 1 つがファイアウォールによってブロックされています。コマンド プロンプトから telnet プログラムを使用して、ホストとポートに接続することから始めますtelnet smtp.gmail.com 587。接続されている場合は、プロンプトが表示されたら ctrl+] を押して入力することで切断できquitます。telnet が接続に失敗した場合は、ファイアウォール/ネットワーク関連の問題を調べ始めます。

アプリケーションの .config ファイルに以下を追加することで、詳細なデバッグ情報を含むファイルを取得することもできます。

<system.diagnostics>
  <sources>
    <source name="System.Net">
      <listeners>
        <add name="TraceFile"/>
      </listeners>
    </source>
    <source name="System.Net.Sockets" maxdatasize="1024">
      <listeners>
        <add name="TraceFile"/>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="System.Net.trace.log" traceOutputOptions="DateTime"/>
  </sharedListeners>
  <switches>
    <add name="System.Net" value="Verbose"/>
    <!--<add name="System.Net.Sockets" value="Verbose"/>-->
  </switches>
  <trace autoflush="true" />
</system.diagnostics>
于 2012-05-02T21:38:58.873 に答える
1

smtp.gmail.comを許可するようにメールアカウントを設定しましたか?

http://support.google.com/mail/bin/answer.py?hl=en&answer=13273

于 2012-05-02T20:55:00.110 に答える
1

コードをsend-email-in-net-through-gmailの回答と比較します。これが問題であるかどうかは定かではありませんが、SmtpClient の作成時に次のものが欠落しています。

DeliveryMethod = SmtpDeliveryMethod.Network

リンクされた質問の例:

var smtp = new SmtpClient
{
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
于 2012-05-02T21:01:17.517 に答える