2016-03-25 16 views
2

これはStackの私の最初の投稿です。という文字通りプログラミングを始めたばかりですので、しばらくお待ちください。トランスポート接続からデータを読み取ることができません。

ボタン1を押したときに「x」のメールアドレスにメールを送信しようとしています。私は周りを見回しました、そして、すべてのスレッドは、専門用語ではなく、私の文脈ではありません。もしこれが "newb"の質問であれば、私は許してください。すでに他の人に答えられているのであれば、

私は " メールの送信に失敗しました。 ---> System.IO.IOException:トランスポート接続からデータを読み取ることができません:。net_io_connectionclosed」

は、ここに私のコード

using (SmtpClient smtp = new SmtpClient()) 
     { 
      smtp.Host = "smtp.gmail.com"; 
      smtp.Port = 465; 
      smtp.Credentials = new NetworkCredential("myemail", "mypassword"); 
      string to = "toemail"; 
      string from = "myemail"; 
      MailMessage mail = new MailMessage(from, to); 
      mail.Subject = "test test 123"; 
      mail.Body = "test test 123"; 
      try 
      { 
       smtp.Send(mail); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", 
          ex.ToString()); 
      } 

だすべてのヘルプは大歓迎です

答えて

4

エラーます」!あなたの試行を拒否するサーバーへの接続の失敗から、ブロックされているポートへの多量のものから来る可能性があります。

私は決してSMTPとその動作に関するエキスパートではありませんが、いくつかのpを設定していないSmtpClient.

また、ポート465を使用すると古くなったことがわかりました。ポート587を使用してコードを実行すると、問題なく実行されました。コードを次のように変更してみてください。

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

namespace EmailTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SendMail(); 
     } 

     public static void SendMail() 
     { 
      MailAddress ma_from = new MailAddress("[email protected]", "Name"); 
      MailAddress ma_to = new MailAddress("[email protected]", "Name"); 
      string s_password = "accountPassword"; 
      string s_subject = "Test"; 
      string s_body = "This is a Test"; 

      SmtpClient smtp = new SmtpClient 
      { 
       Host = "smtp.gmail.com", 
       //change the port to prt 587. This seems to be the standard for Google smtp transmissions. 
       Port = 587, 
       //enable SSL to be true, otherwise it will get kicked back by the Google server. 
       EnableSsl = true, 
       //The following properties need set as well 
       DeliveryMethod = SmtpDeliveryMethod.Network, 
       UseDefaultCredentials = false, 
       Credentials = new NetworkCredential(ma_from.Address, s_password) 
      }; 


      using (MailMessage mail = new MailMessage(ma_from, ma_to) 
      { 
       Subject = s_subject, 
       Body = s_body 

      }) 

       try 
       { 
        Console.WriteLine("Sending Mail"); 
        smtp.Send(mail); 
        Console.WriteLine("Mail Sent"); 
        Console.ReadLine(); 
       } 
       catch (Exception ex) 
       { 
        Console.WriteLine("Exception caught in CreateTestMessage2(): {0}", 
           ex.ToString()); 
        Console.ReadLine(); 
       } 

     } 

    } 
} 

同様に動作することがテストされています。また、Gmailアカウントで「安全性の低いアプリ」にアクセスすることが許可されていない場合は、不正なアクセスが検出されたことを示すエラーとメッセージが受信トレイに送信されます。

これらの設定を変更するには、hereに行ってください。

希望すると、これがどのように機能するか教えてください。

+1

神の恵み、ゲイリー、あなたは命の恩人です! –

+2

SmtpClientは、SMTPモード(ポート465に必要なもの)でSMTPサーバーへの接続をサポートしていません。しかし、*クリアテキストモードでの接続をサポートしていて、サーバとの最初のハンドシェイク(ポート587と同じ)後にSSLに切り替えることはサポートしています。 – jstedfast

+0

@jstedfast説明をありがとう。私はそれがうまくいかなかったことを知っていた。私はなぜ、しかし、非常に確かではなかった。 –

関連する問題