Ne pas rendre plus difficile qu'il doit être. Votre fonction est non-critique; la validation est juste une base en santé mentale de l'étape de capture des fautes de frappe. Je voudrais le faire avec une simple regex, et ne pas perdre de cycles du PROCESSEUR sur quelque chose de trop compliqué:
/\A[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+\z/
Qui a été adapté à partir de http://www.regular-expressions.info/email.html -- ce que vous devriez lire si vous voulez vraiment connaître tous les avantages et les inconvénients. Si vous voulez un plus correct et beaucoup plus compliqué entièrement RFC822-conforme regex, c'est sur cette page. Mais le truc, c'est ceci: vous n'avez pas à obtenir tout à fait raison.
Si l'adresse est valide, vous allez envoyer un e-mail. Si l'e-mail ne parvient pas, vous allez avoir un message d'erreur. À quel point vous pouvez dire à l'utilisateur "Désolé, votre ami n'a pas reçu qu'aimeriez-vous essayer à nouveau?" ou le drapeau pour examen manuel, ou tout simplement de l'ignorer ou de quoi que ce soit.
Ce sont les mêmes options que vous avez à traiter si l'adresse n'a réussi la validation. Parce que même si votre validation est parfait et vous acquérir la preuve absolue que l'adresse existe, l'envoi pourrait encore échouer.
Le coût d'un faux positif sur la validation est faible. Le bénéfice de la validation est également faible. Valider de générosité, et de s'inquiéter des erreurs lorsqu'elles se produisent.