web-dev-qa-db-ja.com

電子メールアドレスがSystem.Net.Mail.MailAddressに対して有効であることを確認します

現在、無効なメールアドレスが原因でエラーがスローされないようにするために、次のことを行います。

Dim mailAddress As MailAddress
Try
   mailAddress = New MailAddress("[email protected]@email.com")
Catch ex As Exception
   'Invalid email
End Try

ただし、Try..Catchに依存するのではなく、MailAddressタイプに対して電子メールアドレスが100%有効であることを検証する方法はありますか?

電子メールを検証するための正規表現関数がたくさんあることは知っていますが、MailAddressタイプがそのアドレスを検証するために使用する関数を探しています。

31
Curt

残念ながら、MailAddress.TryParse 方法。

コードは、.Netでメールアドレスを検証するための理想的な方法です。

32
SLaks

特定の電子メールアドレスがIETF標準に従って有効であることを確認する必要がある場合-この記事の執筆時点では、MailAddressクラスは部分的にしか従わないようです-EmailVerify.NET、ソリューションに簡単に統合できる.NETコンポーネント。正規表現に依存せずに動作しますが、内部の有限状態マシンに依存しているため、非常に高速です。

免責事項:私はこのコンポーネントの主要開発者です。

5
user898296

実際にはこの質問自体に対する答えではありませんが、誰かがそれを必要とする場合に備えて、この方法を使用して電子メールアドレスを検証するためのC#関数を作成しました。

FixEmailAddress("[email protected]")

_"[email protected]"_を返します

FixEmailAddress("[email protected]@xyz.com,[email protected],asdfdsf,[email protected]")

_"[email protected],[email protected]"_を返します

電子メールのコンマ区切りリストはMailAddressCollection.Add()の有効なパラメーターであるため、この方法で電子メールアドレスのリストを処理します。

_/// <summary>
/// Given a single email address, return the email address if it is valid, or empty string if invalid.
/// or given a comma delimited list of email addresses, return the a comma list of valid email addresses from the original list.
/// </summary>
/// <param name="emailAddess"></param>
/// <returns>Validated email address(es)</returns>  
public static string FixEmailAddress(string emailAddress)
{

   string result = "";

    emailAddress = emailAddress.Replace(";",",");
   if (emailAddress.Contains(","))
   {
       List<string> results = new List<string>();
       string[] emailAddresses = emailAddress.Split(new char[] { ',' });
       foreach (string e in emailAddresses)
       {
           string temp = FixEmailAddress(e);
           if (temp != "")
           {
               results.Add(temp);
           }
       }
       result = string.Join(",", results);
   }
   else
   {

       try
       {
           System.Net.Mail.MailAddress email = new System.Net.Mail.MailAddress(emailAddress);
           result = email.Address;
       }
       catch (Exception)
       {
           result = "";
       }

   }

   return result;
_

}

1
Walter Stabosz

MSは、正規表現ベースの電子メールバリデーターのコードも提供しています: https://msdn.Microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

1
Patrick

一部の文字は一部のサービスプロバイダーでは有効ですが、他の文字では同じではありません! SmtpClientは、サービスプロバイダーについて何も知りません。そのため、できるだけフィルタリングする必要があります。 Wikipedia は、スタンダーについてよく言及されています。

MailAddressの検証は [〜#〜] msdn [〜#〜] で言及されています。したがって、MailAddressを初期化する前に、これらの検証を確認できると思います。

0
NaveenBhat

最近.NET APIがMailAddress.TryCreateメソッドで拡張されました。おそらく将来のリリースで提供されるため、一般的なtry-catchボイラープレートの必要性がなくなります。 https://github.com/dotnet/runtime/commit/aea45f4e75d1cdbbfc60daae782d1cfeb700be02

0