2

MailAddressを使用した電子メールの検証についてSOを読み、次のコードを作成しました。

    try
                    {
                        var address = new MailAddress(value.Email);
                    }
                    catch (FormatException)
                    {
                        emailError = "Invalid Email";

 }

驚いたことに、この文字列ndskfndlfk@sdflsdfは適切な電子メールとして検証されます。なぜそうなのか、何か考えはありますか?

4

2 に答える 2

1

これらの電子メールアドレスを本当にフィルタリングする必要がある場合は、ここにある小さなユーティリティを使用できます。このユーティリティは、正規表現を使用して電子メールアドレスを検証します。これは.Net4.0バージョンであることに注意してください。4.5では少し異なります。

using System;
using System.Globalization;
using System.Text.RegularExpressions;

public class RegexUtilities
{
   bool invalid = false;

   public bool IsValidEmail(string strIn)
   {
       invalid = false;
       if (String.IsNullOrEmpty(strIn))
          return false;

       // Use IdnMapping class to convert Unicode domain names.
       strIn = Regex.Replace(strIn, @"(@)(.+)$", this.DomainMapper);
       if (invalid) 
          return false;

       // Return true if strIn is in valid e-mail format.
       return Regex.IsMatch(strIn, 
              @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" + 
              @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$", 
              RegexOptions.IgnoreCase);
   }

   private string DomainMapper(Match match)
   {
      // IdnMapping class with default property values.
      IdnMapping idn = new IdnMapping();

      string domainName = match.Groups[2].Value;
      try {
         domainName = idn.GetAscii(domainName);
      }
      catch (ArgumentException) {
         invalid = true;      
      }      
      return match.Groups[1].Value + domainName;
   }
}

それ以外の場合、ユーザー登録の場合、私は通常、電子メールの検証に依存します。つまり、システムはユーザーにリンク付きの電子メールを送信するため、リンクをクリックすると、電子メールアドレスが本物であることが検証されます。

有効なメールアドレスが実際のメールアドレスではない可能性があります。言い換えれば、それは完全な検証システムに合格するかもしれませんが、それが存在することを保証するものではありません。

于 2012-09-21T22:38:50.410 に答える
1

これは有効なWWWドメイン名ではないかもしれませんが、プライベートネットワークでは有効なドメイン名だと思います。より選択的にしたい場合は、正規表現。

私は正規表現を使用して合法的な電子メール(スパムによって使用される偽物を排除する)を解析しようとしますが、それは厄介です。

実際の電子メールヘッダーにアクセスできる場合、それは実際には簡単にはなりませんが、より正確になります。

于 2012-09-21T22:50:52.657 に答える