現在、無効なメールアドレスが原因でエラーがスローされないようにするために、次のことを行います。
Dim mailAddress As MailAddress
Try
mailAddress = New MailAddress("testing@[email protected]")
Catch ex As Exception
'Invalid email
End Try
ただし、Try..Catch
に依存するのではなく、MailAddress
タイプに対して電子メールアドレスが100%有効であることを検証する方法はありますか?
電子メールを検証するための正規表現関数がたくさんあることは知っていますが、MailAddress
タイプがそのアドレスを検証するために使用する関数を探しています。
残念ながら、MailAddress.TryParse
方法。
コードは、.Netでメールアドレスを検証するための理想的な方法です。
実際にはこの質問自体に対する答えではありませんが、誰かがそれを必要とする場合に備えて、この方法を使用して電子メールアドレスを検証するためのC#関数を作成しました。
FixEmailAddress("[email protected]")
_"[email protected]"
_を返します
FixEmailAddress("wa@[email protected],[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;
_
}
MSは、正規表現ベースの電子メールバリデーターのコードも提供しています: https://msdn.Microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
一部の文字は一部のサービスプロバイダーでは有効ですが、他の文字では同じではありません! SmtpClient
は、サービスプロバイダーについて何も知りません。そのため、できるだけフィルタリングする必要があります。 Wikipedia は、スタンダーについてよく言及されています。
MailAddress
の検証は [〜#〜] msdn [〜#〜] で言及されています。したがって、MailAddress
を初期化する前に、これらの検証を確認できると思います。
最近.NET APIがMailAddress.TryCreateメソッドで拡張されました。おそらく将来のリリースで提供されるため、一般的なtry-catchボイラープレートの必要性がなくなります。 https://github.com/dotnet/runtime/commit/aea45f4e75d1cdbbfc60daae782d1cfeb700be02