- - PR -
(ASP.NET)メール送信でのエラーについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-09-04 13:49
お世話になっております。
回答を頂いた皆様、ありがとうございます。 現在の正規表現チェックだけで問題だとは分かりませんでした。.NETのヘルプに記載 されていたので、信用して使っていました。 > らすかるさん、「何が」エラーを出すのでしょうか? エラーに関しては、「Dim ms = New System.Net.Mail.MailMessage(from,to)」の 送信先メールアドレス(to)で発生します。 動作的には、存在しないメールアドレスで送信した場合にエラーを検知してメッセ ージ表示したいと考えています。しかし、送信前の設定段階でエラーとなっている。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 少し自分で調査したのですが、「smtp.Send(ms)」の部分でもう1つ別の方法があ った(「smtp.Send(from, mailto, subject, body)」)。 これで以下のプログラムを作成して実行したところ、エラーにならず送信すること が出来ました。 <プログラム> Dim from As String = "自分のメールアドレス" Dim mailto As String = "送信先メールアドレス" Dim subject As String = "件名" Dim body As String = "メッセージ" Try smtp.Send(from, mailto, subject, body) Catch ex As SmtpFailedRecipientsException エラー処理 End Try しかし、存在しないメールアドレスで送信した場合にエラーが取得できませんでし た。この時、自分のメールアドレス宛にメッセージが戻ってきました。 「SmtpFailedRecipientsException」の説明に「電子メールを送信し、その電子メー ルがすべての受信者に配信できない場合にスローされる例外」と記載されていたので、 存在しないメールアドレスに送信した場合、送信されずにエラーになると思っていた のですがうまくいきません。 指定したメールアドレスに送信して、その結果を取得する方法はあるのでしょうか? 何か情報がありましたら、教えて頂きたいと思います。 以上 | ||||||||
|
投稿日時: 2006-09-04 14:48
お世話になっております。
別の方法で作成したプログラムを実行したところ、同じようにエラーが発生してし まいました。確認不足でした。 <「どっとねっとふぁん」さんの返答> >.NET Framework 2.0のライブラリではこれらの形式のメールはエラーであると判 >断されます。 >その他にも日本語のエンコードの問題等もあり、結局自作されているという方が >いますね。 「.NET Framework 1.1(ASP.NET2002)」の時は、メール送信に関しては一切問題 なかったです。それが「2.0」で変更されているとは思いませんでした。 自作されているということですが、どのような方法がありますでしょうか? 参考になる情報がありましたら、教えて下さい。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− あと、存在しないメールアドレスへ送信した場合のエラーに関して調査してみたの ですがかなり難しいということが分かりました。 そこで実現可能かどうか教えて頂きたいのですが、エラーの場合に自分宛にエラー メールが送信されます。そのメールの内容を見て「誰に送信したメールがエラー」か を判断したいと考えています。 そのエラーメールの内容をプログラム上で見ることは可能でしょうか? 可能でありましたら、情報を教えて下さい。お願いします。 以上 | ||||||||
|
投稿日時: 2006-09-04 22:01
無理。 それが出来たら、hotmail.com というドメインに対して設定されているユーザがわかってしまうでしょ? 「そうしたい」だって?自分のプライベート アドレスが、全くの他人に知られてしまったらどうなるか、考えてみてください。
も、100%信用することは出来ません。 → http://blogs.wankuma.com/jitta/archive/2006/01/12/20536.aspx 「ブルート フォース系の攻撃」の、最後あたりを読んでみてください。 ##### 以前あったことですが、「自分のところでは、そんなことはしない。だから知りたい」とは、言わないでくださいね。そういうことが出来る以上、すべて出来ないようにしておく必要があります。 | ||||||||
|
投稿日時: 2006-09-04 23:31
お世話になっております。
Jittaさん、ご指導ありがとうございます。 自分自身、安易な考えでいました。エラーが発生してしまい、早く直さないといけな かったので詳細な部分まで考えずにいました。 再度、皆様から頂いた返答を参考に一から調査し直したいと思います。 ありがとうございました。 以上 | ||||||||
|
投稿日時: 2006-09-05 11:22
.NET Framework 2.0 はまだ使ったことがないのでわかりませんが、.NET 1.1 では
.NETのモジュール内でのアドレスの厳密なチェックはしていないようで、エラーに はなりません。但し、接続先のメールサーバがIISのばあい、IISがこれらのアドレス を受付ないのでSMTP通信中にエラーになります(マイクロソフト技術情報JP281538を 参照ください)。sendmailなど(たぶんqmailも)ならばOKです。 "連続するピリオド"や"@の直前のピリオド"を含むメールアドレスは通常のインター ネットメールではありえないのですが、なぜか携帯キャリアは使用を許しています。 以前はDoCoMoだけだったのですが、今年の6月からau(ezweb)でも同様のアドレスが 使えるようになりました。Vodafoneは現在はこれらのアドレスは使用できませんが、 合併前からの名残で、これ以外のRFCに準拠しないアドレスが存在します。 携帯3社は迷惑メール対策のためは個々にメール受信に対する処理が独自の処理を しているようで、残念ながら簡単なソリューションは無いようです。私も苦労して います。 以上 | ||||||||
|
投稿日時: 2006-09-05 11:41
お世話になっております。
「.NET Framework 2.0」でのメール送信ですが、がんふぃーるどさんの情報(メ ールアドレスのlocal-partをダブルクォテーションで囲む)を行うことで解決する ことが出来ました。 エラーメッセージも表示されず、正常に送信することができました。 以上 | ||||||||
|
投稿日時: 2006-09-05 20:55
まさかとは思いますが、宛先(TO)に登録されているアドレスを列挙するようなことは、していないですよね?
で、登録時に「有効なアドレスか調べる方法」が、ひとつあります。 「登録」画面でアドレスを登録してもらい、そのアドレスに対して「本登録」画面の URL を書いたメールを送信します。 このお知らせメールの送信で例外が発生するなら、「本当は無効なアドレス」なので、ユーザにそのことを通知する。 存在しないアドレスを記載した場合、そのユーザは本登録できないので、システムに存在しないアドレスが登録されることはない。 そのあとは、定期的に「登録確認」のメールを送り、その URL を見に来なかったユーザは、アカウントを停止したり、削除する。サービスが本当に必要なユーザは「確認作業」をするだろうが、あまり頻繁に送られてくるなら、無視するようになってしまうでしょう。 | ||||||||
|
投稿日時: 2006-09-05 21:54
お世話になっております。
Jittaさん、返答ありがとうございます。 >まさかとは思いますが、宛先(TO)に登録されているアドレスを列挙するような >ことは、していないですよね? 宛先(TO)は、1件ずつ設定して送信しています。多くても100件前後なので、送信 完了まで約1分ぐらいで終わります。 列挙してしまうと、他人に分かってしまうのでやっていません。 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− 「有効なアドレスか調べる方法」を拝見しました。いい方法ですが、1つ教えて 頂けないでしょうか?申し訳ありませんがお願いします。 >このお知らせメールの送信で例外が発生するなら、「本当は無効なアドレス」なの >で、ユーザにそのことを通知する。 ここの部分に関して、どういう処理をしていいのかが分かりません。 現在、無効のアドレスで送信しても、例外が取得出来ずに送信されてしまう。数分 後にエラーメールが戻ってきて、初めて「無効なアドレスだ」というのがわかる状態 です。この件に関してはまだ調査中です。 以上 |