2012-05-02 6 views
3

以下のコードを使用してGmailを使用してメールを送信しようとしていますが、「リモートホストに接続できません」というエラーが表示され続けます。私は設定をダブルチェックして、すべてがうまく見えます。誰かが私が行方不明のものを参照してください?SmtpClient send mail

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("[email protected]", "mypass"); 
      client.Port = 587; 
      client.Host = "smtp.gmail.com"; 
      client.EnableSsl = true; 
      MailMessage mail = new MailMessage(); 
      mail.From = new MailAddress("[email protected]"); 
      mail.To.Add("[email protected]"); 
      mail.Subject = "subject thing"; 
      mail.Body = "dubbly doo"; 
      try 
      { 
       client.Send(mail); 
      } 
      catch(SmtpException e) 
      { 
       Console.Write(e.InnerException.Message); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 
+0

どの行にエラーが発生しますか? –

+0

可能な複製:http://stackoverflow.com/questions/32260/sending-email-in-net-through-gmail –

+0

@KendallFrey client.Send(メール)はエラーが発生する場所です – steventnorris

答えて

1

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

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

+0

はいsmtp.gmail.comを許可するよう設定しています – steventnorris

+0

あなたのアカウントはsmtp.gmail.comがローカルファイアウォールをチェックして、TCP 587でアウトバウンドにアクセスできるように設定されていますか? – lukiffer

+0

@lukiffer私はそれを確信していませんが、あなたは正しい軌道に乗っていると思います。ここのファイアウォールはかなり激しいです。明日は私たちの頭のsysadminと確認する必要があります。 – steventnorris

1

sending-email-in-net-through-gmailのための答えにあなたのコードを比較します。それはあなたがホストに到達した問題を抱えている可能性が最も高いです

var smtp = new SmtpClient 
{ 
    Host = "smtp.gmail.com", 
    Port = 587, 
    EnableSsl = true, 
    DeliveryMethod = SmtpDeliveryMethod.Network, 
    UseDefaultCredentials = false, 
    Credentials = new NetworkCredential(fromAddress.Address, fromPassword) 
}; 
+0

私はその行を追加しましたが、エラーは変更されませんでした。 – steventnorris

+0

これは実際には 'DeliveryMethod'のデフォルト値です。 –

8

:リンク質問から

DeliveryMethod = SmtpDeliveryMethod.Network 

例:これは問題ですが、あなたはSmtpClientを作成し、次の含まれていない場合、正ませんおよび指定したポート。これは、ファイアウォールによってブロックされているものの範囲である可能性があります。まず、コマンドプロンプトから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> 
+0

優れたヒント@JamieSee! AppPoolのIDに書き込み権限がある "initializeData"の出力ファイルに完全なパスを入れることができます。 –

関連する問題