none
メール送信について RRS feed

  • 質問

  • いつもお世話になります。

    メールの送信について質問です。


       Dim SMTP As New System.Net.Mail.SmtpClient(”xx.xx.xx”)

               

     SMTP.Port = 25 --- ①

               
       SMTP.EnableSsl = False--- ②

                
       SMTP.Timeout = 100000


       Dim msg As New System.Net.Mail.MailMessage()

               

     msg.From = New System.Net.Mail.MailAddress("xxx@xxx.xxx")

     msg.To.Add(New System.Net.Mail.MailAddress("xxx@xxx.xxx"))

     msg.Subject = "件名"

     msg.Body = "本文"

     

     Dim attach As New System.Net.Mail.Attachment("貼付ファイルのパス")

     msg.Attachments.Add(attach)


       SMTP.Send(msg)

     

     msg.Dispose()

     

    上記のようなコードを書いているのですが、

    「メールを送信できませんでした」とすぐになってしまいます。

    ①のところを「465」にして、②のところを「True」にして見たのですが、

    タイムアウトになってしまいます。

     

    コード内でエラーにならないので、どこがおかしいのかわからなくて困っています。

     

    よろしくお願いします。

    2007年6月20日 0:55

回答

  • 私の勘違いだったような気がします。ごめんなさい。当時、VB6製のメール送信プログラムが動かなくて、ファイアウォールのログを見て113番ポートに穴を開けたのは確かのなのですが、今動かしてみると、その穴を潰しても動きました。(^^;

     

    ちょっと整理してみます。

     

    1.Windows XPのファイアウォールはインバウンドのみをチェック。
      2.OutLook Expressで送信はできている。


    とりあえず、TELNETでつなぎにいくとどうなりますか?

     

    Windows TELNET、SMTPコマンド・POPコマンド、POP before SMTP - サンプル
      http://memorva.jp/memo/windows/telnet_smtp_pop.php


    あと、Windonws XP以外のファイアウォールが本当に動いていないかもう一度確認をお願いします。 これが原因でメールが送信できなかった例が過去にありました。例えば、マ〇フィーなんかです。

    2007年6月21日 2:45
    モデレータ

すべての返信

  • いくつか理由が考えられるのですが、まず、ファイアウォールによって25ポートへの送信が禁止されていないか確認してみて下さい。たしかWindows XP SP2ではデフォルトで禁止になっていたと思います。他社のファイアウォールソフトが常駐している場合にはそちらを確認してみて下さい。
    2007年6月20日 1:11
    モデレータ
  • trapemiyaさま、早速の回答ありがとうございます。

     

    Windowsファイアウォール→詳細設定→ローカルエリア→設定で、

    「インターネット メールサーバ(SMTP)」の項目にチェックを入れればよいのでしょうか?

     

    入れてみましたが、結果は同じでした。

     

    他のファイアウォールソフトは入っていません。

     

    Outlokk Express ではそのまま送信できていますが、それとは別の話なのでしょうか?

     

    OEの設定では、ポート№:25 SSL:なし  サーバへの認証:なし

     

    で送信できています。

     

    2007年6月20日 1:46
  • Windowsファイアウォールの詳細タブにセキュリティのログの設定がありますので、そこを設定して、一時的にドロップされたパケットのログをとってみてください。ドロップされていれば、例外タブで、そのメール送信のプログラムを除外してみて下さい。

    2007年6月20日 1:57
    モデレータ
  • 教えて頂いたとおり、ログをとってみたら、

     

    2007-06-20 13:17:08 DROP UDP  (中略)  - - - - - - - RECEIVE

     

    という風にドロップ(?)されていたので、

     

    例外に作成したプログラムを例外タブに追加してチェックをいれましたが、

     

    結果は同じでした。

     

    ※VB2005で開発中に確認するには、VB2005を例外にすればよいのでしょうか?

    2007年6月20日 4:45
  •  にゅう さんからの引用

    例外に作成したプログラムを例外タブに追加してチェックをいれましたが、

     

    結果は同じでした。

     

    ログの内容は変わりましたか? 25番ポートへ送信しようとしてドロップされているログがまだ残っていますでしょうか?

     

     にゅう さんからの引用

    ※VB2005で開発中に確認するには、VB2005を例外にすればよいのでしょうか?

     

    プロジェクトのあるフォルダの下にbinフォルダがあり、そこのDebugまたはReleaseのフォルダ内にexeファイルがあるはずですので、それを例外に設定すれば良いと思います。デバッグ中はどうなるのか確かめていませんが、いずれにしてもドロップされたことがログに残っていれば、それを例外として設定してみて下さい。

    2007年6月20日 5:29
    モデレータ
  •  trapemiya さんからの引用

     

    ログの内容は変わりましたか? 25番ポートへ送信しようとしてドロップされているログがまだ残っていますでしょうか?

     

     

    ドロップされているログが残っていました。

    すいません、どれが25番ポートへの送信かわかりません・・・

     

    DROP UDP  ~ 

    となっていますが、

    コマンドプロンプトで netstat /a を実行したとき

    smtpのProto が「TCP」となっているのですが・・・関係あります?

     

     

    2007年6月20日 7:04
  • 対象の mail(SMTP) server へは認証無しで行けるんですか?

     

    普通何らかの認証方法で制限かかっているモンですが。

     

    Firewall は関係ないでしょう。

    Windows firewall なら待ちうけ用に port を開くときしか制限かかりませんので。

     

     

    2007年6月20日 13:44
  • 以前、VB6製のメール送信プログラムがWindows Xpで動かなくて、Windowsファイアウォールに穴を開けた記憶があり、てっきり25番ポートを開けたと思っていましたが、113番ポート(インバウンド)の穴を開けたのかもしれません。明日、会社で確認してみます。本日確かめようと思っていたのですが、時間がなくて確認できませんでした。ごめんなさい。

     

    タイムアウトというのが引っかかっています。認証等の問題で接続できなければ、メールサーバーからのメッセージが何かしら表示されると思うのですが、タイムアウトというのはメールサーバーまで到達していないように思えたものですから・・・。まぁ、でも、必ずメールサーバーが何らかのメッセージを返すとは限らないとは思いますが。

    2007年6月20日 15:14
    モデレータ
  •  trapemiya さんからの引用

    タイムアウトというのが引っかかっています。認証等の問題で接続できなければ、メールサーバーからのメッセージが何かしら表示されると思うのですが、タイムアウトというのはメールサーバーまで到達していないように思えたものですから・・・。まぁ、でも、必ずメールサーバーが何らかのメッセージを返すとは限らないとは思いますが。

     

    これは、port 465 で対象の SMTP server に接続しにいったときですよね?

    それなら、相手の SMTP server にいく経路のどこかで firewall がかかっているのではないですか?

     

    そもそも、相手の SMTP server が port 465 で service を提供していなければ filter していること十分ありえると思いますけど。

     

    port 25 のときの message は違うようなので、port 25 で問題となっている原因を探ってください。

    多分、対象の SMTP server は自分で管理しているものでは無いでしょうから、管理者に接続するために必要な情報聞いてください。

    2007年6月20日 16:01
  • 返信おそくなりすいません。

     

    管理者に問い合わせてみて、後ほど報告させてもらいます。

    2007年6月20日 23:42
  • 報告させていただきます。

     

    ① ポート№ : SMTPは、25、465(SSL)。

    ② SSL : ポート25の場合はナシ、ポート465の場合はアリ。

    ③ サーバへの認証 : メールアカウント、パスワードがあれば、ナシでいけるはずです。

    ④ SMTPサーバまでの途中でファイアウォール : ファイアウオールは、あるがブロックはしていません。

     

    との回答をもらいました。

     

    念のため

     

    SMTP.Credentials = New System.Net.NetworkCredential("xxx@xxx.xx.xx", "xxxx")

     

    の一文を追加して、SSLあり、なし双方で試してみましたが、結果はかわりませんでした。

    2007年6月21日 1:38
  • 私の勘違いだったような気がします。ごめんなさい。当時、VB6製のメール送信プログラムが動かなくて、ファイアウォールのログを見て113番ポートに穴を開けたのは確かのなのですが、今動かしてみると、その穴を潰しても動きました。(^^;

     

    ちょっと整理してみます。

     

    1.Windows XPのファイアウォールはインバウンドのみをチェック。
      2.OutLook Expressで送信はできている。


    とりあえず、TELNETでつなぎにいくとどうなりますか?

     

    Windows TELNET、SMTPコマンド・POPコマンド、POP before SMTP - サンプル
      http://memorva.jp/memo/windows/telnet_smtp_pop.php


    あと、Windonws XP以外のファイアウォールが本当に動いていないかもう一度確認をお願いします。 これが原因でメールが送信できなかった例が過去にありました。例えば、マ〇フィーなんかです。

    2007年6月21日 2:45
    モデレータ
  • 認証方法が書いていないですよ。。。

     

    SMTP_AUTH とか POP before SMTP とか。

    2007年6月21日 3:01
  •  trapemiya さんからの引用


    あと、Windonws XP以外のファイアウォールが本当に動いていないかもう一度確認をお願いします。 これが原因でメールが送信できなかった例が過去にありました。例えば、マ〇フィーなんかです。

     

    もうしわけありません。。。ファイアウォールがありました。

    おっしゃるとおりマ○フィーでした。

    ログをみたらブロックされまくってました。

    アクセス保護から解除したらすんなり送信できました。

    (ちなみに開発中の場合は「○○○.exe」ではなく「○○○.vsh」を除外したらうまくいきました)

     

    trapemiya 様、ちゃっぴ 様

    貴重な時間をとらせてしまって申し訳ありませんでした m(_ _)m

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

    2007年6月21日 4:42