Je construis un site web en utilisant `Django. Le site Web pourrait avoir d'importants utilisateurs de pays non anglophones.
Je veux juste savoir s'il existe des restrictions techniques sur les types de caractères qu'une adresse électronique peut contenir.
Les adresses électroniques contiennent-elles uniquement des alphabets anglais, des chiffres, "_", "@" et "."?
Sont-ils autorisés à contenir des alphabets non anglais comme "é" ou "ü"?
Sont-ils autorisés à contenir des caractères chinois, japonais ou Unicode?
Hé bien oui. Lisez (au moins) this article de Wikipedia.
Je vis en Argentine et voici les courriels autorisés comme ñoñó[email protected]
La syntaxe autorisée dans une adresse électronique est décrite dans RFC 3696 et est très complexe.
La règle exacte [pour la partie locale; la partie précédant le '@'] correspond à tout caractère ASCII, y compris control caractères, peuvent apparaître entre guillemets ou dans une chaîne de guillemets. En citant est nécessaire, le caractère barre oblique inverse est utilisé pour citer ce qui suit personnage
[...]
Sans les guillemets, les parties locales peuvent être constituées de n’importe quelle combinaison de caractères alphabétiques, chiffres ou l’un des caractères spéciaux ! # $% & '* + -/=? ^ _ ` {| } ~
[...]
Tous les caractères, ou combinaisons de bits (octets), sont autorisés dans Noms DNS. Cependant, il existe une forme préférée qui est requise par la plupart des applications ...
... et ainsi de suite.
Au lieu de vous soucier de ce que les adresses électroniques peuvent contenir et ne contiennent pas, ce qui ne vous intéresse pas vraiment, vérifiez si votre configuration peut leur envoyer un courrier électronique ou non - c'est ce qui compte vraiment pour vous! Cela signifie réellement envoyer un email de vérification.
Sinon, vous ne pouvez pas détecter un cas beaucoup plus courant de fautes de frappe accidentelles qui restent dans n'importe quel jeu de caractères que vous créez. (Rapide: [email protected] est-il une adresse valide à utiliser sur votre site, ou non?) Cela évite également d'aliéner inutilement et gratuitement tout utilisateur lorsque vous lui indiquez que son adresse parfaitement valide et correcte est fausse. Il se peut que vous ne puissiez toujours pas traiter certaines adresses (c'est l'aliénation nécessaire), comme le disent les autres réponses: le traitement des adresses e-mail n'est pas trivial; mais c'est quelque chose dont ils ont besoin pour savoir s'ils veulent vous fournir une adresse e-mail!
Tout ce que vous devez vérifier, c'est que l'utilisateur fournit du texte avant un @, un texte après, et que l'adresse n'est pas excessivement longue (disons 1000 caractères). Si vous souhaitez envoyer un avertissement ("cela ressemble à un problème! Existe-t-il une faute de frappe? Vérifiez avant de continuer"), c'est correct, mais cela ne devrait pas bloquer le processus d'ajout d'adresse e-mail.
Bien sûr, si vous ne voulez pas leur envoyer d'email, prenez ce qu'ils entrent. Par exemple, l'adresse peut n'être utilisée que pour Gravatar , mais Gravatar vérifie quand même toutes les adresses électroniques.
Il est possible d’avoir des adresses électroniques non-ASCII, comme le montre le présent RFC: http://tools.ietf.org/html/rfc3490 mais je pense que cela n’a pas été défini pour tous les pays, et de quoi Je comprends qu'un seul code de langue sera autorisé pour chaque pays, et il existe également un moyen de le convertir en ASCII, mais ce ne sera pas une question triviale.
J'ai rencontré des adresses électroniques avec des guillemets simples, et pas rarement non plus. Nous rejetons les espaces (bien qu’il soit permis à proprement parler), plus d’un signe '@' et des chaînes d’adresse de moins de cinq caractères au total. Je pense que cela résout plus de problèmes qu'il n'en crée, et jusqu'à présent, sur dix ans et plusieurs centaines de milliers d'adresses, il a permis de rejeter de nombreuses adresses non conformes. Il existe également un déclencheur pour réduire toutes les adresses électroniques lors de l'insertion ou de la mise à jour.
Cela étant dit, il est impossible de valider un courrier électronique sans aller-retour chez le propriétaire, mais au moins, nous pouvons rejeter des données extrêmement suspectes.
S'appuyant sur @ Matas Vaitkevicius 'answer: J'ai corrigé quelque peu la regex en Python, pour qu'elle corresponde aux adresses électroniques valides définies dans cette page et cette page de wikipedia, en utilisant ce site Web regex101 génial: https://regex101.com/r/uP2oL7/26
J'espère que ça aide quelqu'un! :)