Убедитесь, что адрес электронной почты действителен для System.Net.Mail.MailAddress - PullRequest
31 голосов
/ 11 августа 2011

В настоящее время, чтобы избежать появления ошибок из-за неправильных адресов электронной почты, я делаю следующее:

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

Однако, вместо того, чтобы зависеть от Try..Catch, существует ли способ проверкиадрес электронной почты будет на 100% действителен для типа MailAddress?

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

Ответы [ 5 ]

32 голосов
/ 11 августа 2011

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

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

5 голосов
/ 17 августа 2011

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

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

1 голос
/ 08 сентября 2015

MS также предоставляет код для валидатора электронной почты на основе регулярных выражений: https://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

1 голос
/ 11 июня 2013

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

FixEmailAddress("walter@xyz.com")

возвращает "walter@xyz.com"

FixEmailAddress("wa@lter@xyz.com,tom@xyz.com,asdfdsf,vsav-sdfsd@xyz.xyz")

возвращает "tom@xyz.com,vsav-sdfsd@xyz.xyz"

Я обрабатываю списки адресов электронной почты таким образом, потому что разделенный запятыми список адресов электронной почты является допустимым параметром для 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;

}

0 голосов
/ 11 августа 2011

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

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

...