- - PR -
ASP.Net上のSystem.Web.Mail.SMTPMailクラスの使用方法
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2003-10-21 10:34
はじめまして Raioと申します。
現在、Webシステムにてメール送信のシステムを作成しているのですが System.Web.Mail.SMTPMailクラスを使用するときの 注意点みたいなものはありますでしょうか? (あいまいな表現ですいません。) 作成したシステムは、不特定多数の人が使用するシステムで ほとんどの場合は問題なくメール送信できるのですが 有るタイミング(このタイミングがわかりません)に 「'CDO.Message' オブジェクトにアクセスできませんでした。」 というエラーが発生してしまいます。 InnerExceptionを拾うと ・呼び出しのターゲットが例外をスローしました。 ・The transport failed to connect to the server. というエラーが発生しているようです。 現在はメール送信用のクラスを作成し この中でSMTPMail.Sendで送信を行っています。 (メールサーバーは別サーバーです。) メール送信用クラスは送信用画面にてインスタンスを作成し メール送信用クラスにFrom,To,Subject,Bodyを渡している といった簡単なものです。 ただし送信用画面は複数存在します。 もし、こういった経験や何か情報がありましたら 教えてください。よろしくお願い致します。 |
|
投稿日時: 2003-10-21 10:44
こんにちは。
私が実際にそのエラーメッセージを見たときは、 FromのADDRESSに不正がある。(メールサーバの設定に依存) の時がありました。 タイミングの問題でしたら的外れな解答になるかもしれませんが、 「不特定」ということはFromのADDRESSも不特定と考えられるかと思い返答させて頂きました。 ※情報として外部公開WEBサーバであるのか、内部用WEBサーバであるのか。等、教えて頂きたいです。 |
|
投稿日時: 2003-10-21 10:52
Crime様、ご回答ありがとうございます。
私もそれを最初は疑ったのですが それはないようです。 エラーが多発するため メール送信に失敗したら3回まで同じ情報で 再送信を行う。という処理を追加したところ ほぼ2回目で送信ができるのです。 (もちろんFromは変更していません。) Webサーバーは内部用です。 といっても拠点がいくつもあり インターネットにて接続されている状態です。 (質問の回答として的外れでしたらすいません。) よろしくお願い致します。 |
|
投稿日時: 2003-10-21 10:58
Raioです。
追加の情報をいくつか記述したいのですが このシステムは AM10〜12 PM14〜17 というのがもっとも良く使用される時間帯なのですが そこで頻発するようです。 (当たり前ですが・・・^^;;;) その他の時間帯は、発生していません。 SMTPMailクラスは、リファレンスを見てみると 完全なマルチスレッドとなっていますが これに上限数などはあるのでしょうか? あったとしても今回は特に他でメール送信を行っていなくても 発生しているようなのですが・・・ 全てがあいまいな表現で申し訳ございません。 よろしくお願い致します。 |
|
投稿日時: 2003-10-21 11:30
どうも。Crimeです。
メールサーバーの指定方法なんですが、どういった形で指定されていますでしょうか。 ※サーバー名称、IPアドレス 等。 タイミングエラーということで、ネットワークの弊害が何か起きているような気がします。 |
|
投稿日時: 2003-10-21 11:36
Crime様、ご回答ありがとうございます。
メールアドレスの指定方法は サーバー名称で行っています。 ネットワークの弊害も確かにありえると思うのですが それだと判定する材料がないのです。 何かネットワークの弊害であると証明する良い方法が ありましたら教えていただけないでしょうか? |
|
投稿日時: 2003-10-21 11:57
こんにちは。
とりあえずIPアドレスで指定したほうが確実な気がします。 判定材料と言いますと、多少難しいのですが・・・。 一番簡単なのは、 メールサーバにPingコマンドを送る。そのログを取得する。 (サーバの設定等で無効の場合がありますのでご注意を。) ことかと思います。 他にもTracert等、対象マシンの存在確認の方法はあると思いますが、 私程度の知識ではうまく説明できませんので誰かご教授願います 方法ですが、メール送信時にWindowsの[ping.exe]を呼ぶ。 結果をファイルに書き込みし、原因を調査する。 実際に実行する際はコマンドラインとして 「time /t >> ファイル保存場所/ファイル名」 「ping MailServerName /n 1 >> ファイル保存場所/ファイル名 」 ---「ping MailServerIP-ADDRESS /n 1 >> ファイル保存場所/ファイル名 」 となります。 一行目で時刻を記録。 二行目で実際に発行されたPingの結果を記録。 ※同一ファイル名を指定して下さい。 実際はプロトコルが違いますので、確実な結果とは言い切れませんが 多少の解決策にはなるかもしれません。 できれば--の行のIPアドレスでの記録も同時実行して欲しいです。 |
|
投稿日時: 2003-10-21 12:34
なるほど
送信前にpingの結果を取得するんですね。 質問なのですが ASP.Net + C# で コマンドラインの実行はどのように 行うのでしょうか? すいません。ASP.Net も C#も初心者のため 全くわかりません^^;;; もしお分かりになれば教えてください。 |
