web-dev-qa-db-fra.com

Vérifiez que l'adresse e-mail est valide pour System.Net.Mail.MailAddress

Actuellement, pour éviter que des erreurs ne soient générées en raison d'adresses e-mail non valides, je fais ce qui suit:

Dim mailAddress As MailAddress
Try
   mailAddress = New MailAddress("testing@[email protected]")
Catch ex As Exception
   'Invalid email
End Try

Cependant, plutôt que de dépendre de Try..Catch, existe-t-il un moyen de valider que l'adresse e-mail sera valide à 100% pour le type MailAddress?

Je sais qu'il existe de nombreuses fonctions d'expression régulière pour valider les e-mails, mais je recherche la fonction que le type MailAddress utilise pour valider ses adresses.

31
Curt

Malheureusement il n'y a pas MailAddress.TryParse méthode.

Votre code est le moyen idéal pour valider les adresses e-mail dans .Net.

32
SLaks

Si vous devez vous assurer qu'une adresse e-mail donnée est valide selon les normes IETF - que la classe MailAddress ne semble suivre que partiellement, au moment d'écrire ces lignes - je vous suggère de jeter un œil à EmailVerify.NET , un composant .NET que vous pouvez facilement intégrer dans vos solutions. Il ne dépend pas d'expressions régulières pour effectuer son travail mais il s'appuie sur une machine à états finis interne, il est donc très très rapide.

Avertissement: je suis le développeur principal de ce composant.

5
user898296

Pas vraiment une réponse à cette question en soi, mais au cas où quelqu'un en aurait besoin, j'ai écrit une fonction C # pour valider les adresses e-mail en utilisant cette méthode.

FixEmailAddress("[email protected]")

renvoie "[email protected]"

FixEmailAddress("wa@[email protected],[email protected],asdfdsf,[email protected]")

renvoie "[email protected],[email protected]"

Je traite les listes d'adresses e-mail de cette façon car une liste d'e-mails séparés par des virgules est un paramètre valide pour 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;

}

1
Walter Stabosz

MS fournit également le code d'un validateur d'e-mail basé sur l'expression régulière: https://msdn.Microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

1
Patrick

Certains caractères sont valables chez certains fournisseurs de services mais il n'en va pas de même chez d'autres! Les SmtpClient ne savent rien des fournisseurs de services. Il doit donc filtrer le moins possible. Le Wikipedia est bien mentionné au sujet des standers.

La validation de MailAddress est mentionnée sur le MSDN . Par conséquent, je pense que vous pouvez vérifier ces validations avant d'initialiser le MailAddress.

0
NaveenBhat

Récemment, l'API .NET a été étendue avec une méthode MailAddress.TryCreate, à venir probablement dans les futures versions, ce qui éliminera le besoin de la plate-forme standard de try-catch: https://github.com/dotnet/runtime/commit/aea45f4e75d1cdbbfc60daae782d1cfeb700be02

0
seekingtheoptimal