- PR -

(ASP.NET)メール送信でのエラーについて

投稿者投稿内容
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 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」の説明に「電子メールを送信し、その電子メー
ルがすべての受信者に配信できない場合にスローされる例外」と記載されていたので、
存在しないメールアドレスに送信した場合、送信されずにエラーになると思っていた
のですがうまくいきません。
 指定したメールアドレスに送信して、その結果を取得する方法はあるのでしょうか?
何か情報がありましたら、教えて頂きたいと思います。

以上
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 2006-09-04 14:48
お世話になっております。

 別の方法で作成したプログラムを実行したところ、同じようにエラーが発生してし
まいました。確認不足でした。

<「どっとねっとふぁん」さんの返答>
>.NET Framework 2.0のライブラリではこれらの形式のメールはエラーであると判
>断されます。
>その他にも日本語のエンコードの問題等もあり、結局自作されているという方が
>いますね。

 「.NET Framework 1.1(ASP.NET2002)」の時は、メール送信に関しては一切問題
 なかったです。それが「2.0」で変更されているとは思いませんでした。
 自作されているということですが、どのような方法がありますでしょうか?
 参考になる情報がありましたら、教えて下さい。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 あと、存在しないメールアドレスへ送信した場合のエラーに関して調査してみたの
ですがかなり難しいということが分かりました。

 そこで実現可能かどうか教えて頂きたいのですが、エラーの場合に自分宛にエラー
メールが送信されます。そのメールの内容を見て「誰に送信したメールがエラー」か
を判断したいと考えています。
 そのエラーメールの内容をプログラム上で見ることは可能でしょうか?
 可能でありましたら、情報を教えて下さい。お願いします。

以上
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-04 22:01
引用:

 指定したメールアドレスに送信して、その結果を取得する方法はあるのでしょうか?


無理。
 それが出来たら、hotmail.com というドメインに対して設定されているユーザがわかってしまうでしょ?

 「そうしたい」だって?自分のプライベート アドレスが、全くの他人に知られてしまったらどうなるか、考えてみてください。
引用:

そこで実現可能かどうか教えて頂きたいのですが、エラーの場合に自分宛にエラー
メールが送信されます。そのメールの内容を見て「誰に送信したメールがエラー」か
を判断したいと考えています。


も、100%信用することは出来ません。
http://blogs.wankuma.com/jitta/archive/2006/01/12/20536.aspx
「ブルート フォース系の攻撃」の、最後あたりを読んでみてください。

#####
以前あったことですが、「自分のところでは、そんなことはしない。だから知りたい」とは、言わないでくださいね。そういうことが出来る以上、すべて出来ないようにしておく必要があります。
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 2006-09-04 23:31
お世話になっております。

Jittaさん、ご指導ありがとうございます。
自分自身、安易な考えでいました。エラーが発生してしまい、早く直さないといけな
かったので詳細な部分まで考えずにいました。

再度、皆様から頂いた返答を参考に一から調査し直したいと思います。
ありがとうございました。

以上
ラッコ7
会議室デビュー日: 2006/09/05
投稿数: 1
投稿日時: 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社は迷惑メール対策のためは個々にメール受信に対する処理が独自の処理を
しているようで、残念ながら簡単なソリューションは無いようです。私も苦労して
います。

以上
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 2006-09-05 11:41
お世話になっております。

  「.NET Framework 2.0」でのメール送信ですが、がんふぃーるどさんの情報(メ
 ールアドレスのlocal-partをダブルクォテーションで囲む)を行うことで解決する
 ことが出来ました。
  エラーメッセージも表示されず、正常に送信することができました。

以上
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-09-05 20:55
 まさかとは思いますが、宛先(TO)に登録されているアドレスを列挙するようなことは、していないですよね?


 で、登録時に「有効なアドレスか調べる方法」が、ひとつあります。

「登録」画面でアドレスを登録してもらい、そのアドレスに対して「本登録」画面の URL を書いたメールを送信します。
このお知らせメールの送信で例外が発生するなら、「本当は無効なアドレス」なので、ユーザにそのことを通知する。
存在しないアドレスを記載した場合、そのユーザは本登録できないので、システムに存在しないアドレスが登録されることはない。

そのあとは、定期的に「登録確認」のメールを送り、その URL を見に来なかったユーザは、アカウントを停止したり、削除する。サービスが本当に必要なユーザは「確認作業」をするだろうが、あまり頻繁に送られてくるなら、無視するようになってしまうでしょう。
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 2006-09-05 21:54
お世話になっております。
Jittaさん、返答ありがとうございます。

>まさかとは思いますが、宛先(TO)に登録されているアドレスを列挙するような
>ことは、していないですよね?

宛先(TO)は、1件ずつ設定して送信しています。多くても100件前後なので、送信
完了まで約1分ぐらいで終わります。
列挙してしまうと、他人に分かってしまうのでやっていません。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
 「有効なアドレスか調べる方法」を拝見しました。いい方法ですが、1つ教えて
頂けないでしょうか?申し訳ありませんがお願いします。

>このお知らせメールの送信で例外が発生するなら、「本当は無効なアドレス」なの
>で、ユーザにそのことを通知する。

 ここの部分に関して、どういう処理をしていいのかが分かりません。
 現在、無効のアドレスで送信しても、例外が取得出来ずに送信されてしまう。数分
後にエラーメールが戻ってきて、初めて「無効なアドレスだ」というのがわかる状態
です。この件に関してはまだ調査中です。

以上

スキルアップ/キャリアアップ(JOB@IT)