none
ローカルホストからSMTPメール送信できない RRS feed

  • 質問

  • 下記内容でメール送信しようとしたところ

    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日 0:44

回答

    • 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月12日 9:51
  • "localhost" だからダメなのか?(IP アドレスを指定すると OK なのか)、リモートからつなぐと OK なのか?、といったあたりはいかがでしょうか?

    # さすがに SMTP サービスがない、なんて落ちではないですよねぇ。
    # いや、Vista や 7 の IIS だと SMTP サービスがインストールされないですから...。

    2010年4月12日 2:05
  • 「リモート サーバーに接続できません。」とありますが、一般的なメールクライアントソフトで送信できるのでしょうか?
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月12日 2:10
    モデレータ
  • WebException が発生していることから、ASP.NET アプリケーションだと想定しますと、

    * Web Service 上に SMTP サーバが動作していない
    * ASP.NET から SMTP へ接続が許可されていない
    * ASP.NET から TCP/IP の接続が許可されていない

    などが想像されます。Web サーバの ASP.NET や SMTP サーバの設定を行われている管理者に対して、これらの操作が許可されているか確認してみては?

     

    2010年4月12日 3:30
  • localhostと指定したら極小テックさんのパソコン内で完結します。したがって、極小テックさんのパソコンでsmtpサーバーが動いている必要があります。通常、そのようなsmtpサーバーから外部のインターネットへは直接出ることができません。少なくとも、そこから外部(インターネット)に接続されているsmtpサーバーへ転送しなければなりません。
    そのため、普通はlocalhostで動作しているsmtpサーバーを指定するのではなく、外部に接続されたsmtpサーバーを直接指定します。会社で利用されているメールサーバーがあると思いますので、一般的にはそれを利用することになるでしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月12日 7:24
    モデレータ
  •        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月12日 9:23
  • 一般的なメールクライアントソフトで送信というのは
    メーラーから相手先にメールが届くかということでよろしかったでしょうか?
    それでしたら問題なくメール送信できます。

    確認なのですが、このケースで一般的なメール クライアント ソフトの送信サーバーとポートの設定は、localhost&25 にしているんでしょうか?
    2010年4月12日 9:40
  • あまり多くの人から回答するとかえって混乱するかもしれませんが・・・

    昔 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 に設定するのは自分のメールアカウントの方です。

    2010年4月12日 12:57
  • C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。

    まずVWDEやVCSEで開発する場合、"localhost"と指定したら

    私のパソコン内部で完結するものでしょうか?

    それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?

    また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?

    極小テックさんが VWDE (Visual Web Developer Express かな?) や VCSE (Visual C# Express かな?) で開発しているプログラムは、いわゆる「SMTP クライアント」です。

    これとは別に「SMTP サーバー」が必要です。

    これは会社内部のパソコンに、メールを送信する場合にも必要です。

     

    普段、メール送信の際に利用されている SMTP サーバーがあるかと思います。

    一般的には、それを SmtpClient.Host に指定することになるでしょう。

    2010年4月13日 7:13

すべての返信

  • "localhost" だからダメなのか?(IP アドレスを指定すると OK なのか)、リモートからつなぐと OK なのか?、といったあたりはいかがでしょうか?

    # さすがに SMTP サービスがない、なんて落ちではないですよねぇ。
    # いや、Vista や 7 の IIS だと SMTP サービスがインストールされないですから...。

    2010年4月12日 2:05
  • 「リモート サーバーに接続できません。」とありますが、一般的なメールクライアントソフトで送信できるのでしょうか?
    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月12日 2:10
    モデレータ
  • WebException が発生していることから、ASP.NET アプリケーションだと想定しますと、

    * Web Service 上に SMTP サーバが動作していない
    * ASP.NET から SMTP へ接続が許可されていない
    * ASP.NET から TCP/IP の接続が許可されていない

    などが想像されます。Web サーバの ASP.NET や SMTP サーバの設定を行われている管理者に対して、これらの操作が許可されているか確認してみては?

     

    2010年4月12日 3:30
  • 皆様、ご回答いただきありがとうございます。

     

    totojoさん

    IPアドレスを直接書いてみましたが同じエラーでした。

     

    trapemiyaさん

    一般的なメールクライアントソフトで送信というのは

    メーラーから相手先にメールが届くかということでよろしかったでしょうか?

    それでしたら問題なくメール送信できます。

    アドバイスと違う返答でしたら申し訳ないです。

     

    Takaokaさん

    ASPではなくフォームアプリケーションで試しましたが同様のエラーでした。

     

    会社内部のパソコンでローカルに送ろうとしています。

    もちろんルータ内部です。

    C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。

    まずVWDEやVCSEで開発する場合、"localhost"と指定したら

    私のパソコン内部で完結するものでしょうか?

    それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?

    また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?

    ご見識が御有りの方ご教授いただけましたら幸いです。

     

    2010年4月12日 7:14
  • localhostと指定したら極小テックさんのパソコン内で完結します。したがって、極小テックさんのパソコンでsmtpサーバーが動いている必要があります。通常、そのようなsmtpサーバーから外部のインターネットへは直接出ることができません。少なくとも、そこから外部(インターネット)に接続されているsmtpサーバーへ転送しなければなりません。
    そのため、普通はlocalhostで動作しているsmtpサーバーを指定するのではなく、外部に接続されたsmtpサーバーを直接指定します。会社で利用されているメールサーバーがあると思いますので、一般的にはそれを利用することになるでしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年4月12日 7:24
    モデレータ
  •        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月12日 9:23
  • 一般的なメールクライアントソフトで送信というのは
    メーラーから相手先にメールが届くかということでよろしかったでしょうか?
    それでしたら問題なくメール送信できます。

    確認なのですが、このケースで一般的なメール クライアント ソフトの送信サーバーとポートの設定は、localhost&25 にしているんでしょうか?
    2010年4月12日 9:40
    • 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月12日 9:51
  • あまり多くの人から回答するとかえって混乱するかもしれませんが・・・

    昔 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 に設定するのは自分のメールアカウントの方です。

    2010年4月12日 12:57
  • C#の質問というよりはネットワークの質問に少しずれるかもしれませんがご容赦ください。

    まずVWDEやVCSEで開発する場合、"localhost"と指定したら

    私のパソコン内部で完結するものでしょうか?

    それとも一回インターネットに出てからまた私のパソコンに帰って来る形なのでしょうか?

    また、内部で完結している場合は、ポート解放はしなければいけないものなのでしょうか?

    極小テックさんが VWDE (Visual Web Developer Express かな?) や VCSE (Visual C# Express かな?) で開発しているプログラムは、いわゆる「SMTP クライアント」です。

    これとは別に「SMTP サーバー」が必要です。

    これは会社内部のパソコンに、メールを送信する場合にも必要です。

     

    普段、メール送信の際に利用されている SMTP サーバーがあるかと思います。

    一般的には、それを SmtpClient.Host に指定することになるでしょう。

    2010年4月13日 7:13
  • 皆様、たくさんのご回答ありがとうございます。

    まず、結論から申しますと

    会社で普段使用しているSMTPサーバ経由で送信したらうまくいきました。

    アドバイスありがとうございます。

    次にローカルサーバ経由での送信の件ですが

    Dlack Jumbo Dog というソフトを使ってSMTPサーバにしているのですが

    上記エラーが発生している状態です。

    ですので、C#の質問というよりはサーバの問題だと思いますので

    この質問は一度閉じさせていただきたいと思います。

    皆様ご協力大変ありがとうございました。

    2010年4月14日 0:45