Во-первых, адрес электронной почты, предоставленная в корректном формате . - Вы можете сделать еще один шаг и проверить, действительно ли домен действителен или нет, если хотите; но в любом случае, вы должны подтвердить право собственности, и в этом случае вы будете знать, что адрес электронной почты и домен действительны.
Во-вторых, вы должны действительно не использовать Regex для проверки адреса электронной почты; проверка правильности адреса электронной почты встроена в платформу .NET, и вы не должны воссоздавать колесо для чего-то вроде этого.
Простая функция проверки, которая выполняет обе проверки, выглядит следующим образом:
public static bool IsValidEmailAddress(string emailAddress, bool verifyDomain = true)
{
var result = false;
if (!string.IsNullOrWhiteSpace(emailAddress))
{
try
{
// Check Format (Offline).
var addy = new MailAddress(emailAddress);
if (verifyDomain)
{
// Check that a valid MX record exists (Online).
result = new DnsStubResolver().Resolve<MxRecord>(addy.Host, RecordType.Mx).Any();
}
else
{
result = true;
}
}
catch (SocketException)
{
result = false;
}
catch (FormatException)
{
result = false;
}
}
return result;
}
Чтобы запустить код, вам нужно будет установить пакет NuGet ARSoft.Tools.Net
, который необходим для записи MX поиска *, и вы необходимо будет добавить соответствующие объявления с использованием различных используемых классов (в наши дни должно быть довольно автоматическим в VisualStudio).
(*: Просто проверка действительного имени хоста через System.Net.Dns.GetHost*
не достаточно, так как это может дать вам некоторые ложные негативы для некоторых областей, которые имеют только записи MX, такие как [email protected]
и т.д.)
_The электронной почты ниже Недействительный формат_ Что заставляет вас говорить это? Кажется правильным адресом для меня. 'coö' в настоящее время не используется, но не будет гарантировано, что он не будет использоваться и в будущем. –
Не действительный адрес электронной почты? В доменной части допускаются символы, отличные от ASCII, для обслуживания интернационализированных доменных имен. Насколько мне известно, 'coö' - это не используемый в настоящее время TLD, но C# не может знать, что он никогда не будет использоваться как один. – Mourndark
Если вы хотите проверить список TLD, ICANN предоставит: https://data.iana.org/TLD/tlds-alpha-by-domain.txt – Mourndark