Проверка адресов электронной почты - сложная задача, и написание кода для предварительной проверки было бы довольно сложно. Если вы посмотрите раздел Remarks
документации MailAddress
class , вы увидите, что существует множество строк, которые считаются действительными адресами электронной почты (включая комментарии в квадратных скобках)доменные имена и встроенные кавычки).
И поскольку исходный код доступен, проверьте метод ParseAddress
здесь , и вы получите представление о коде, который выЯ должен написать, чтобы подтвердить адрес электронной почты самостоятельно. Жаль, что нет общедоступного TryParse
метода, который мы могли бы использовать, чтобы избежать создания исключения.
Так что, вероятно, лучше сначала выполнить простую проверку - убедитесь, что она содержит минимальные требования к адресу электронной почты (который буквально выглядит как user@domain
, где domain
не обязательно должен содержать символ '.'
), а затем пусть обработка исключений позаботится обо всем остальном:
foreach (var userID in recipientUserIds)
{
var userInfo = GetUserInfo(userID);
// Basic validation on length
var email = userInfo?.Email1?.Trim();
if (string.IsNullOrEmpty(email) || email.Length < 3) continue;
// Basic validation on '@' character position
var atIndex = email.IndexOf('@');
if (atIndex < 1 || atIndex == email.Length - 1) continue;
// Let try/catch handle the rest, because email addresses are complicated
MailAddress to;
try
{
to = new MailAddress(email, $"{userInfo.FirstName} {userInfo.LastName}");
}
catch (FormatException)
{
continue;
}
using (MailMessage message = new MailMessage(from, to))
{
// populate message and send email here
}
}