- PR -

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

投稿者投稿内容
らすかる
会議室デビュー日: 2005/12/22
投稿数: 18
投稿日時: 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

 エラーメッセージ:
  「指定された文字列は、電子メール アドレスに必要な形式ではありません」

以上
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-04 11:14
ほら。
http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-09-04 11:20
まず、その正規表現が間違っています。
メールアドレスは正規表現で正確にチェックすることができないのです。

それ以前に考え方が違っています。
最終的にメールを送信するのは内部のライブラリなので
メールアドレスのチェックもそのライブラリの行っているチェックを利用するべきです。
使ったことないので詳細は分りませんけど。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2006-09-04 11:21
こんにちは。

引用:

<結果>
 以下のメールアドレスの時にエラー(X:英字、9:数値)
  ・x.xxxxxx..999@docomo.ne.jp
  ・xxx.xxxxxxx.@docomo.ne.jp


RFC 2821(2822) ではメールアドレスの local-part における @ 直前の .(ピリオド) や .(ピリオド) の連続は許されていないはずです。
実際にエラーが発生するかどうかはメールサーバの実装次第なのだと思いますが。

ともかく、そういったメールアドレスを受け付けない正規表現に変更することで対処できると思います。
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2006-09-04 11:21
らすかるさん、「何が」エラーを出すのでしょうか?

おそらく、送信に使うメールサーバがエラーを出すんだと思います。で、その場合、らすかるさんとしてはどう動作するのが望む動作なのでしょうか? 問題のメールアドレスを不正としてプログラムで拒否したいのか、問題のメールアドレスに送りたいのか。

実際は、ピリオドが複数個連続したり、@直前がピリオドで終るメールアドレスは不正です(RFC 2822)。が、そういうアドレスが DoCoMo や KDDI au では使えます。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-04 11:26
引用:

スフレさんの書き込み (2006-09-04 11:21) より:
実際は、ピリオドが複数個連続したり、@直前がピリオドで終るメールアドレスは不正です(RFC 2822)。が、そういうアドレスが DoCoMo や KDDI au では使えます。


そういえばこの件でauとか叩かれていたよなーw
http://neta.ywcafe.net/000435.html
がんふぃーるど
ベテラン
会議室デビュー日: 2006/06/05
投稿数: 58
お住まい・勤務地: さいたま
投稿日時: 2006-09-04 12:45
引用:

ueさんの書き込み
実際にエラーが発生するかどうかはメールサーバの実装次第なのだと思いますが。


たしかに、この問題はメールサーバによりますね。
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
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-09-04 13:19
.NET Framework 2.0のライブラリではこれらの形式のメールはエラーであると判断されます。
その他にも日本語のエンコードの問題等もあり、結局自作されているという方がいますね。


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