2009-07-21 35 views
2

私のコードの電子メール操作の一部が失敗していることに気付きましたが、修正しようとしていますが、次のエラーが表示されます。Exchange経由の電子メール:既存の接続がリモートホストによって強制的にクローズされました

System.Net.Mail.SmtpException: Failure sending mail. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. 
---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 
    at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) 
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
    --- End of inner exception stack trace --- 
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size) 
    at System.Net.DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine) 
    at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller) 
    at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port) 
    at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port) 
    at System.Net.Mail.SmtpClient.GetConnection() 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    --- End of inner exception stack trace --- 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 

私のコードは非常に簡単です:

MailMessage mail = new MailMessage(); 
mail.To.Add(email_to); 
mail.From = new MailAddress(email_from); 
mail.Subject = email_subject; 
mail.Body = email_body; 


var client = new SmtpClient(smtp_server_url); 
client.Credentials = new NetworkCredential(username, password, domain); 
client.Timeout = 30000; 
client.Send(mail); 

誰もが起こっていることができるものの任意のアイデアを持っていますか?交換サーバー管理者は、ログに何も表示されないと言っています。

また、これは驚きではありませんが、私がpowershellからメッセージを送信しようとしたときも同じことが起こります。

答えて

1

通常、Exchangeサーバー上の構成です。私たちの環境では、ネットワーク管理者は、マシンがExchangeサーバーをリレーとして使用することを明示的に許可する必要があります。私のコードが実行されているマシンが明示的にサーバーに追加されていない場合は、このメッセージが表示されます。うまくいけば助けてくれます。

+0

ありがとうございますが、それはそうではない、私はOutlookから送信することができます。私は問題があることを.NETコードから送信するだけです –

+0

私は設定/認証の問題も疑いがあります。 email_fromとemail_toがあなたのメールアドレスに設定されている場合(Exchange用と同じです) – jsight

+0

あなたはすでにこれを知っているかもしれませんので、私が間違っていると思ったら私を許してください。しかし、Outlookでメールを送ることができるだけなので交換サーバーの設定を却下しません。 SMTP経由で接続するSmtpClient。それは、Outlookの接続方法とは異なります。管理者は、マシンがsmtpメールのリレーとしてサーバーを使用できるようにする必要があります。これは、マシンのIPとクライアントの資格情報またはその両方によって行われます。 – David

3

ありがとうございました!

本質的に、このエラー(ErrorCode 10054)は、サーバーに正常に接続したときに発生すると思われますが、実行できないことを要求します。ここに私の場合は

は何が起こったかです:

  • 私たちの前向きメールサーバmail.mycompany.comを介してメールを送信するために使用
  • しかし、Exchangeサーバーのアドレスではありません
  • 、それをあなたのブラウザがOutlookにオンラインでアクセスするように指しているアドレスです。
  • これは、そのアドレスのWeb以外の要求が交換サーバーにルーティングされていたため、以前は正常でした。ある時点で、このポリシーは変更されました。私たちのケースでは、スパム管理がAT & Tに引き渡されたからです。もちろん、私はこのことについて知らされませんでした。
  • 確かにありましたので、そのサイトで実行しているサーバーは、それは私がそれに接続するが、その後すぐに、接続をドロップする(または可能性さえも、それはすべての道開くことができない)
  • 固定正しいホスト名の設定を聞かせ問題。