using System.Text.RegularExpressions; using MimeKit; namespace Bit.Core.Utilities; public static class EmailValidation { public static bool IsValidEmail(this string emailAddress) { if (string.IsNullOrWhiteSpace(emailAddress)) { return false; } try { var parsedEmailAddress = MailboxAddress.Parse(emailAddress).Address; if (parsedEmailAddress != emailAddress) { return false; } } catch (ParseException) { return false; } // The regex below is intended to catch edge cases that are not handled by the general parsing check above. // This enforces the following rules: // * Requires ASCII only in the local-part (code points 0-127) // * Requires an @ symbol // * Allows any char in second-level domain name, including unicode and symbols // * Requires at least one period (.) separating SLD from TLD // * Must end in a letter (including unicode) // See the unit tests for examples of what is allowed. var emailFormat = @"^[\x00-\x7F]+@.+\.\p{L}+$"; if (!Regex.IsMatch(emailAddress, emailFormat)) { return false; } return true; } }