Подтвердить что ты не робот

Проверьте, что адрес электронной почты действителен для 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, существует ли способ подтверждения того, что адрес электронной почты будет на 100% действителен для типа MailAddress?

Я знаю, что там много регулярных выражений для проверки электронной почты, но я ищу функцию, которую тип MailAddress использует для проверки своих адресов.

4b9b3361

Ответ 1

К сожалению, нет метода MailAddress.TryParse.

Ваш код является идеальным способом проверки адресов электронной почты в .Net.

Ответ 2

Если вам нужно убедиться, что данный адрес электронной почты действителен в соответствии со стандартами IETF, который, по-видимому, соответствует классу MailAddress, на момент написания этой статьи, я предлагаю вам взглянуть на EmailVerify.NET, компонент .NET, который вы можете легко интегрировать в свои решения. Он не зависит от регулярных выражений, чтобы выполнять свою работу, но он полагается на внутреннюю машину конечного состояния, поэтому очень быстро.

Отказ от ответственности: я являюсь ведущим разработчиком этого компонента.

Ответ 3

На самом деле это не ответ на этот вопрос, но если кому-то это нужно, я написал функцию С# для проверки адресов электронной почты с помощью этого метода.

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;

}

Ответ 5

Некоторые символы действительны для некоторых поставщиков услуг, но то же самое не в других! SmtpClient ничего не знают о поставщиках услуг. Поэтому он должен фильтровать как можно меньше. Wikipedia приветствуется упоминанием о владельцах.

Валидация MailAddress упоминается на MSDN. Поэтому я думаю, что вы можете проверить эти проверки перед инициализацией MailAddress.