Ответ 1
К сожалению, нет метода MailAddress.TryParse
.
Ваш код является идеальным способом проверки адресов электронной почты в .Net.
В настоящее время во избежание ошибок, возникающих из-за неправильных адресов электронной почты, я делаю следующее:
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
использует для проверки своих адресов.
К сожалению, нет метода MailAddress.TryParse
.
Ваш код является идеальным способом проверки адресов электронной почты в .Net.
Если вам нужно убедиться, что данный адрес электронной почты действителен в соответствии со стандартами IETF, который, по-видимому, соответствует классу MailAddress
, на момент написания этой статьи, я предлагаю вам взглянуть на EmailVerify.NET, компонент .NET, который вы можете легко интегрировать в свои решения. Он не зависит от регулярных выражений, чтобы выполнять свою работу, но он полагается на внутреннюю машину конечного состояния, поэтому очень быстро.
Отказ от ответственности: я являюсь ведущим разработчиком этого компонента.
На самом деле это не ответ на этот вопрос, но если кому-то это нужно, я написал функцию С# для проверки адресов электронной почты с помощью этого метода.
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;
}
MS также предоставляет код для проверки подлинности на основе регулярного выражения: https://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Некоторые символы действительны для некоторых поставщиков услуг, но то же самое не в других! SmtpClient
ничего не знают о поставщиках услуг. Поэтому он должен фильтровать как можно меньше. Wikipedia приветствуется упоминанием о владельцах.
Валидация MailAddress
упоминается на MSDN. Поэтому я думаю, что вы можете проверить эти проверки перед инициализацией MailAddress
.