トップ回答者
ローカルホストからSMTPメール送信できない

質問
-
下記内容でメール送信しようとしたところ
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
msg.From = new System.Net.Mail.MailAddress("a@a", "自動送信メール");
msg.To.Add(new System.Net.Mail.MailAddress("b@b"));
msg.Subject = "自動監視メッセージ";
msg.Body = "このメッセージは自動送信によるメールです。";
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
sc.Host = "localhost";
sc.Port = 25;
sc.Send(msg); ←ここでエラー発生
msg.Dispose();
このようにエラーが発生いたしました。
System.Net.Mail.SmtpException はユーザー コードによってハンドルされませんでした。
Message="メールを送信できませんでした。"
Source="System"
StackTrace:
場所 System.Net.Mail.SmtpClient.Send(MailMessage message)
場所 _Default.Button2_Click(Object sender, EventArgs e) 場所 c:\Users\OVATA\Documents\Visual Studio 2008\WebSites\WebSite1\Default.aspx.cs:行 80
場所 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
場所 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
場所 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
場所 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
場所 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
場所 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException: System.Net.WebException
Message="リモート サーバーに接続できません。"
Source="System"
StackTrace:
場所 System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6, Int32 timeout)
場所 System.Net.PooledStream.Activate(Object owningObject, Boolean async, Int32 timeout, GeneralAsyncDelegate asyncCallback)
場所 System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
場所 System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
場所 System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
場所 System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
場所 System.Net.Mail.SmtpClient.GetConnection()
場所 System.Net.Mail.SmtpClient.Send(MailMessage message)
InnerException: System.Net.Sockets.SocketException
Message="対象のコンピューターによって拒否されたため、接続できませんでした。 127.0.0.1:25"
Source="System"
ErrorCode=10061
NativeErrorCode=10061
StackTrace:
場所 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
場所 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
場所 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
InnerException:ポート番号を変えたりしましたがやはり同様のエラーでした。
対処方法をご存知の方ご連絡いただければ幸いです。
- 編集済み 極小テック 2010年4月12日 5:07
回答
-
- localhost で SMTP サーバーが動作していない
- ポート25 ではないポートで SMTP サーバーがサービスしている
- 使用されている SMTP サーバーが 127.0.0.1:25 で Listen していない
まずは telnet で確認してみるのがいいかと思うのですが。(「telnet localhost 25」ですかね。)
[XFOR] ポート 25 に Telnet で接続して SMTP 通信をテストする
http://support.microsoft.com/kb/153119/ja
ポート 25 で Telnet セッションを確立しようとするとエラー メッセージ "ホストとの接続が切断されました" が表示される
http://support.microsoft.com/kb/319880/ja- 回答としてマーク 極小テック 2010年4月14日 0:46
-
localhostと指定したら極小テックさんのパソコン内で完結します。したがって、極小テックさんのパソコンでsmtpサーバーが動いている必要があります。通常、そのようなsmtpサーバーから外部のインターネットへは直接出ることができません。少なくとも、そこから外部(インターネット)に接続されているsmtpサーバーへ転送しなければなりません。
そのため、普通はlocalhostで動作しているsmtpサーバーを指定するのではなく、外部に接続されたsmtpサーバーを直接指定します。会社で利用されているメールサーバーがあると思いますので、一般的にはそれを利用することになるでしょう。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 極小テック 2010年4月14日 0:46
-
InnerException: System.Net.Sockets.SocketException
Message="対象のコンピューターによって拒否されたため、接続できませんでした。 127.0.0.1:25"
Source="System"
ErrorCode=10061
NativeErrorCode=10061
StackTrace:
場所 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
場所 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
場所 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
InnerException:と、例外が出ています。
ErrorCode=10061 は WSAECONNREFUSED、つまり Listen しているアプリケーション(SMTPサーバー)がいない、ということです。
- localhost で SMTP サーバーが動作していない
- ポート25 ではないポートで SMTP サーバーがサービスしている
- 使用されている SMTP サーバーが 127.0.0.1:25 で Listen していない
などが考えられます。
利用されようとしている SMTP サーバーについて設定等を見直すとよいと思います。
- 回答としてマーク 極小テック 2010年4月14日 0:46
-
あまり多くの人から回答するとかえって混乱するかもしれませんが・・・
昔 Biglobe に outmail というサービス(仮想 SMTP サーバーをインス
トールして http プロトコルで送受信)がありましたが、SmtpClient の
Host に localhost と設定して送信できるとすると、そのようなケース
に限られると思います。そのような設定になってなければ、Host には
msg.From = new System.Net.Mail.MailAddress("a@a", "自動送信メール");
のメールアドレスの @ の右の部分を設定するのが普通です。
それから、たぶん SMTP 認証が必要と思いますが、コードを見る限りその
設定がないです。それ以外で、一般的にメールが送信できない時に考えられる原因には以下
のような項目がありますが、これらは問題ないのでしょうか?(1) SMTP サーバアドレス指定の間違い
(2) メールアカウントの間違い
(3) ポートの間違い
(4) OP25B
(5) アクセス禁止(例:社内 LAN → 社外メールサーバ)
(6) セキュリティソフト(例:ファイアウォール)によるブロック
(7) プログラムの書き方の間違いまず、上記をチェックして、結果を書いてもらうと、問題解決のお役に立
てるかもしれません。------------------
誤記訂正
すみません、間違ってました。誤: msg.To.Add(new System.Net.Mail.MailAddress("b@b"));
↓
正: msg.From = new System.Net.Mail.MailAddress("a@a", "自動送信メール");Host に設定するのは自分のメールアカウントの方です。
- 編集済み SurferOnWww 2010年4月12日 21:48 誤記訂正
- 回答としてマーク 極小テック 2010年4月14日 0:46
-
C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。
まずVWDEやVCSEで開発する場合、"localhost"と指定したら
私のパソコン内部で完結するものでしょうか?
それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?
また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?
極小テックさんが VWDE (Visual Web Developer Express かな?) や VCSE (Visual C# Express かな?) で開発しているプログラムは、いわゆる「SMTP クライアント」です。
これとは別に「SMTP サーバー」が必要です。
これは会社内部のパソコンに、メールを送信する場合にも必要です。
普段、メール送信の際に利用されている SMTP サーバーがあるかと思います。
一般的には、それを SmtpClient.Host に指定することになるでしょう。
- 回答としてマーク 極小テック 2010年4月14日 0:46
すべての返信
-
皆様、ご回答いただきありがとうございます。
totojoさん
IPアドレスを直接書いてみましたが同じエラーでした。
trapemiyaさん
一般的なメールクライアントソフトで送信というのは
メーラーから相手先にメールが届くかということでよろしかったでしょうか?
それでしたら問題なくメール送信できます。
アドバイスと違う返答でしたら申し訳ないです。
Takaokaさん
ASPではなくフォームアプリケーションで試しましたが同様のエラーでした。
会社内部のパソコンでローカルに送ろうとしています。
もちろんルータ内部です。
C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。
まずVWDEやVCSEで開発する場合、"localhost"と指定したら
私のパソコン内部で完結するものでしょうか?
それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?
また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?
ご見識が御有りの方ご教授いただけましたら幸いです。
- 編集済み 極小テック 2010年4月12日 7:45
-
localhostと指定したら極小テックさんのパソコン内で完結します。したがって、極小テックさんのパソコンでsmtpサーバーが動いている必要があります。通常、そのようなsmtpサーバーから外部のインターネットへは直接出ることができません。少なくとも、そこから外部(インターネット)に接続されているsmtpサーバーへ転送しなければなりません。
そのため、普通はlocalhostで動作しているsmtpサーバーを指定するのではなく、外部に接続されたsmtpサーバーを直接指定します。会社で利用されているメールサーバーがあると思いますので、一般的にはそれを利用することになるでしょう。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 極小テック 2010年4月14日 0:46
-
InnerException: System.Net.Sockets.SocketException
Message="対象のコンピューターによって拒否されたため、接続できませんでした。 127.0.0.1:25"
Source="System"
ErrorCode=10061
NativeErrorCode=10061
StackTrace:
場所 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
場所 System.Net.Sockets.Socket.InternalConnect(EndPoint remoteEP)
場所 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
InnerException:と、例外が出ています。
ErrorCode=10061 は WSAECONNREFUSED、つまり Listen しているアプリケーション(SMTPサーバー)がいない、ということです。
- localhost で SMTP サーバーが動作していない
- ポート25 ではないポートで SMTP サーバーがサービスしている
- 使用されている SMTP サーバーが 127.0.0.1:25 で Listen していない
などが考えられます。
利用されようとしている SMTP サーバーについて設定等を見直すとよいと思います。
- 回答としてマーク 極小テック 2010年4月14日 0:46
-
- localhost で SMTP サーバーが動作していない
- ポート25 ではないポートで SMTP サーバーがサービスしている
- 使用されている SMTP サーバーが 127.0.0.1:25 で Listen していない
まずは telnet で確認してみるのがいいかと思うのですが。(「telnet localhost 25」ですかね。)
[XFOR] ポート 25 に Telnet で接続して SMTP 通信をテストする
http://support.microsoft.com/kb/153119/ja
ポート 25 で Telnet セッションを確立しようとするとエラー メッセージ "ホストとの接続が切断されました" が表示される
http://support.microsoft.com/kb/319880/ja- 回答としてマーク 極小テック 2010年4月14日 0:46
-
あまり多くの人から回答するとかえって混乱するかもしれませんが・・・
昔 Biglobe に outmail というサービス(仮想 SMTP サーバーをインス
トールして http プロトコルで送受信)がありましたが、SmtpClient の
Host に localhost と設定して送信できるとすると、そのようなケース
に限られると思います。そのような設定になってなければ、Host には
msg.From = new System.Net.Mail.MailAddress("a@a", "自動送信メール");
のメールアドレスの @ の右の部分を設定するのが普通です。
それから、たぶん SMTP 認証が必要と思いますが、コードを見る限りその
設定がないです。それ以外で、一般的にメールが送信できない時に考えられる原因には以下
のような項目がありますが、これらは問題ないのでしょうか?(1) SMTP サーバアドレス指定の間違い
(2) メールアカウントの間違い
(3) ポートの間違い
(4) OP25B
(5) アクセス禁止(例:社内 LAN → 社外メールサーバ)
(6) セキュリティソフト(例:ファイアウォール)によるブロック
(7) プログラムの書き方の間違いまず、上記をチェックして、結果を書いてもらうと、問題解決のお役に立
てるかもしれません。------------------
誤記訂正
すみません、間違ってました。誤: msg.To.Add(new System.Net.Mail.MailAddress("b@b"));
↓
正: msg.From = new System.Net.Mail.MailAddress("a@a", "自動送信メール");Host に設定するのは自分のメールアカウントの方です。
- 編集済み SurferOnWww 2010年4月12日 21:48 誤記訂正
- 回答としてマーク 極小テック 2010年4月14日 0:46
-
C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。
まずVWDEやVCSEで開発する場合、"localhost"と指定したら
私のパソコン内部で完結するものでしょうか?
それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?
また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?
極小テックさんが VWDE (Visual Web Developer Express かな?) や VCSE (Visual C# Express かな?) で開発しているプログラムは、いわゆる「SMTP クライアント」です。
これとは別に「SMTP サーバー」が必要です。
これは会社内部のパソコンに、メールを送信する場合にも必要です。
普段、メール送信の際に利用されている SMTP サーバーがあるかと思います。
一般的には、それを SmtpClient.Host に指定することになるでしょう。
- 回答としてマーク 極小テック 2010年4月14日 0:46