専門学校の実習でメール受信装置をVB.netで作成しています。
メールサーバと通信し、コマンドを送るところまではうまくいったのですが、
数秒毎に同じ処理を繰り返すことができません。
2回目以降の処理がどうしても表示されず困っています。
どう処理すれば繰り返すことができるでしょうか?
原因がわからないので調べようがありません。
よろしくお願いいたします。
ちなみに繰り返し処理はタイマー機能を使って処理をしています。
処理内容を簡単に説明しますと
サーバ問い合わせ⇒ストリームの取得⇒応答メッセージの取得⇒ユーザIDの送信⇒応答メッセージ(ユーザ認証)の取得⇒パスワードの送信⇒応答メッセージ(パス認証)の取得⇒STAT(メールの数とサイズ取得)の送信⇒応答メッセージ(メールの数とサイズ)の取得⇒QUIT(ログアウト)の送信⇒応答メッセージ(ログアウト認証)の取得
をタイマーの中で行っています。
タイマーの設定時間に問題があるかと思い、長くしてみましたが(1分)解決できませんでした。
> 原因がわからないので調べようがありません。
> よろしくお願いいたします。
逆です、調べてみて原因が分からないならともかく、
調べもせずに原因が分かるわけがありません。
> 原因がわからないので調べようがありません。
デバッグという作業全てを否定する名言だね
すいません。
調べても原因がわからないの間違いです。
サイトをめぐっても、この過去スレを漁ってもわからなかったので教えていただきたいということです。
気を害する発言をしてすいませんでした。
# .NET は分からんけど (^^; 。
とりあえずタイマ処理が 2 度目以降もちゃんと呼び出せているか
どうかから調べてみては?
まぁ、現状どんなコードを書いているか分からないので、
とりあえず、参考にしてみては?
かなり前、MSNに投稿されていたページ
http://anetm.com/dev/tools/vbdotnet/
の中に、
[メールを送信するには?]
http://anetm.com/dev/tools/vbdotnet/112227.htm
>とりあえずタイマ処理が 2 度目以降もちゃんと呼び出せているか
>どうかから調べてみては?
説明不足だったので補足させていただきますが、タイマー処理がしっかり行われているか変数に1を足していき、表示させていきましたがしっかり働いているようです。
サーバ問い合わせからQUITで抜け出すまでの処理がうまくいきません。
以前、QUIT処理を省いたところ、解決できたかのように思えたのですがQUIT処理がなければサーバとの接続を切断できなくなるので繰り返し処理をすることができなくなるため、その解決方法は使えませんでした。
サーバ問い合わせ
〜
↓
QUIT
↓
サーバ問い合わせ
〜
↓
QUIT・・・・
と繰り返したいです
説明が下手で申し訳ありません・・・
素人の直感・・・
QUIT後再度問い合わせ時にはサーバにログインなどの
初期処理が必要なんじゃないでしょうか?
実は初回時のみ別のところでその処理やって
2回目以降はQUITしてしまい接続が切れているから取得できないとか・・・
タイマ処理はちゃんと定期的に呼び出されていて、POP サーバとの
やりとりも一度は正しく動作してるように見えるんですよね。
であれば。
葉月αさんがご指摘している点が問題ない事を確認した上で。
* 二度目以降の POP サーバへの問い合わせ時に TCP ストリームが
取得できてるか。
* 二度目以降のサーバ問い合わせ〜 QUIT 発行までの間に
POP サーバからエラーメッセージが返って来ていないか。
あたりを確認してみてはどうかと。
>QUIT後再度問い合わせ時にはサーバにログインなどの
>初期処理が必要なんじゃないでしょうか?
自分でもそう思い普通にコマンドプロンプトを開いてコマンド入力で確認したところ関係なさそうでした。
コマンドプロンプトで初期処理が必要でないのでVB.netでも必要ないのでは?という安直な考えでの確認ですが・・・
もう一度調べなおす必要があるかもしれないので参考にさせていただきますね。
(学校からのアクセスでアクセス制限されている為、英数半角が使えないので見苦しい点がありますがご了承ください)
>* 二度目以降の POP サーバへの問い合わせ時に TCP ストリームが取得できてるか。
>* 二度目以降のサーバ問い合わせ〜 QUIT 発行までの間にPOP サーバからエラーメッセージが返って来ていないか。
try〜catchを利用して調べたところ以下のようなメッセージが出ました。
“System.Net.Sockets.TcpClient”という名前の破棄されたオブジェクトにアクセスできません。
オブジェクト名:“System.Net.Sockets.TcpClient”です
破棄した覚えないのに・・・orz
何とか原因解明に近づいたので自分でも調べてみたいと思います。
ご意見ありがとうございました。
解決しました!
原因として先頭で宣言していた
Dim DataStream As System.Net.Sockets.NetworkStream 'NetworkStream
Dim Client As New System.Net.Sockets.TcpClient 'クライアント接続用TcpClientの作成
を繰り返し処理の先頭に持ってきたらすんなり解決・・・。
本当、単純なことで皆さんにご迷惑かけて申し訳なかったです・・・。
ありがとうございました!
ツイート | ![]() |