- - PR -
(ASP.NET)メール送信でのエラーについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-09-04 11:04
お世話になります。
OS:WindowsXP 言語:VS2005 ASP.NET(Web Application) 現在、メール送信プログラムを作成しています。 しかし、一部「メールアドレスの形式が正しくありません」ということで送信でき ません。送信前にメールアドレスの正規表現のチェックをしていて問題はないのです が、エラーになってしまいます。 修正を行いたいのですが、対応が分からずにいます。以下に処理内容を記載してお きます。何か情報がありましたら、教えて下さい。お願いします。 <処理内容> '-----送信先メールアドレスの設定----- to = "送信先メールアドレス" '-----メールアドレスの正規化チェック----- Return Regex.IsMatch(to, "^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$") '-----メール送信内容を設定----- Dim ms = New System.Net.Mail.MailMessage(from, to) ms.Subject = "件名" ms.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-2022-JP") ms.Body = "送信メッセージ" ms.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-2022-JP") '-----メールを送信する----- smtp.Send(ms) <結果> 以下のメールアドレスの時にエラー(X:英字、9:数値) ・x.xxxxxx..999@docomo.ne.jp ・xxx.xxxxxxx.@docomo.ne.jp エラーメッセージ: 「指定された文字列は、電子メール アドレスに必要な形式ではありません」 以上 | ||||
|
投稿日時: 2006-09-04 11:14
ほら。
http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/ | ||||
|
投稿日時: 2006-09-04 11:20
まず、その正規表現が間違っています。
メールアドレスは正規表現で正確にチェックすることができないのです。 それ以前に考え方が違っています。 最終的にメールを送信するのは内部のライブラリなので メールアドレスのチェックもそのライブラリの行っているチェックを利用するべきです。 使ったことないので詳細は分りませんけど。 | ||||
|
投稿日時: 2006-09-04 11:21
こんにちは。
RFC 2821(2822) ではメールアドレスの local-part における @ 直前の .(ピリオド) や .(ピリオド) の連続は許されていないはずです。 実際にエラーが発生するかどうかはメールサーバの実装次第なのだと思いますが。 ともかく、そういったメールアドレスを受け付けない正規表現に変更することで対処できると思います。 _________________ 上本亮介 (ue) @ わんくま同盟 Microsoft MVP for VSTO (Jul 2008 - Jun 2009) Hello Another World! .NET 勉強会 / ヒーロー島 | ||||
|
投稿日時: 2006-09-04 11:21
らすかるさん、「何が」エラーを出すのでしょうか?
おそらく、送信に使うメールサーバがエラーを出すんだと思います。で、その場合、らすかるさんとしてはどう動作するのが望む動作なのでしょうか? 問題のメールアドレスを不正としてプログラムで拒否したいのか、問題のメールアドレスに送りたいのか。 実際は、ピリオドが複数個連続したり、@直前がピリオドで終るメールアドレスは不正です(RFC 2822)。が、そういうアドレスが DoCoMo や KDDI au では使えます。 | ||||
|
投稿日時: 2006-09-04 11:26
そういえばこの件でauとか叩かれていたよなーw http://neta.ywcafe.net/000435.html | ||||
|
投稿日時: 2006-09-04 12:45
たしかに、この問題はメールサーバによりますね。 Exchangeだと発生して、どっかのフリーのメールサーバだと発生しなかった気がします。 尚、RFC2822などにも書かれていると思いますが、local-partをダブルクォテーションン で囲えばほとんどの文字をlocal-partとして扱えます。 例えばx.xxxxxx..999@docomo.ne.jpを"x.xxxxxx..999"@docomo.ne.jpとすれば、 問題なく送信することができます。 正規表現等でメールアドレスを弾いてしまうと、ユーザがメアドを変更しないと 使えなくなってしまいます。メアド変更するなんて選択をユーザにさせるのは 厳しいと思う(友人全員に通知とかメーリングリスト修正とか面倒)ので、 問題のあるメールアドレスのlocal-partをダブルクォテーションで囲って しまうのがいいかと… http://www.puni.net/~mimori/rfc/rfc2822.txt | ||||
|
投稿日時: 2006-09-04 13:19
.NET Framework 2.0のライブラリではこれらの形式のメールはエラーであると判断されます。
その他にも日本語のエンコードの問題等もあり、結局自作されているという方がいますね。 |
1|2|3
次のページへ»