Je ne demande pas de validation complète par e-mail.
Je veux juste savoir quels sont les caractères autorisés user-name
et les server
parties de l'adresse e-mail. Cela peut être simplifié à l'extrême, peut-être que les adresses e-mail peuvent prendre d'autres formes, mais je m'en fiche. Je pose des questions sur ce simple formulaire: user-name@server
(par exemple [email protected]) et les caractères autorisés dans les deux parties.
forms
email
email-validation
email-address
WildWezyr
la source
la source
+
est autorisé. Cela me rend fou lorsque les sites Web ne le permettent pas parce que mon e-mail contient un+
et tant de sites ne le permettent pas."hello world"@example.com
est valable.Réponses:
Voir RFC 5322: Format de message Internet et, dans une moindre mesure, RFC 5321: Simple Mail Transfer Protocol .
La RFC 822 couvre également les adresses e-mail, mais elle traite principalement de sa structure:
Et comme d'habitude, Wikipedia a un article décent sur les adresses e-mail :
En plus des caractères ASCII, à partir de 2012, vous pouvez utiliser les caractères internationaux ci
U+007F
- dessus , encodés en UTF-8 comme décrit dans la spécification RFC 6532 et expliqué sur Wikipédia . Notez qu'à partir de 2019, ces normes sont toujours marquées comme proposées, mais sont déployées lentement. Les changements dans cette spécification ont essentiellement ajouté des caractères internationaux en tant que caractères alphanumériques valides (atext) sans affecter les règles sur les caractères spéciaux autorisés et restreints comme!#
et@:
.Pour la validation, voir Utilisation d'une expression régulière pour valider une adresse e-mail .
La
domain
pièce est définie comme suit :la source
[email protected]
n'est pas une adresse e-mail valide, mais l'[email protected]
est, même si les deux utilisent les mêmes caractères.Fais attention! Il y a beaucoup de pourriture des connaissances dans ce fil (des choses qui étaient vraies et qui ne le sont plus).
Pour éviter les rejets faussement positifs des adresses e-mail réelles dans le monde actuel et futur, et de n'importe où dans le monde, vous devez connaître au moins le concept de haut niveau de la RFC 3490 , "Internationalisation des noms de domaine dans les applications (IDNA)". Je sais que les gens aux États-Unis et en A ne sont souvent pas au courant de cela, mais il est déjà largement utilisé et en augmentation rapide dans le monde (principalement les parties non dominées par l'anglais).
L'essentiel est que vous pouvez désormais utiliser des adresses comme mason @ 日本 .com et wildwezyr@fahrvergnügen.net. Non, ce n'est pas encore compatible avec tout ce qui existe (comme beaucoup l'ont regretté ci-dessus, même les adresses simples de style qmail + ident sont souvent rejetées à tort). Mais il y a un RFC, il y a une spécification, il est maintenant soutenu par l'IETF et l'ICANN, et - plus important encore - il y a un nombre important et croissant d'implémentations soutenant cette amélioration qui sont actuellement en service.
Je ne savais pas grand-chose sur ce développement moi-même jusqu'à ce que je retourne au Japon et que je commence à voir des adresses e-mail comme hei @ や る .ca et des URL Amazon comme celle-ci:
http://www.amazon.co.jp/ エ レ ク ト ロ ニ ク ス - デ ジ タ ル カ メ ラ - ポ ー タ ブ ル オ ー デ ィ オ / b / ref = topnav_storetab_e? ie = UTF8 & node = 3210981
Je sais que vous ne voulez pas de liens vers des spécifications, mais si vous vous fiez uniquement aux connaissances obsolètes des pirates sur les forums Internet, votre validateur de messagerie finira par rejeter les adresses e-mail que les utilisateurs non anglophones s'attendent de plus en plus à travailler. Pour ces utilisateurs, une telle validation sera tout aussi ennuyeuse que la forme banale mortelle que nous détestons tous, celle qui ne peut pas gérer un + ou un nom de domaine en trois parties ou autre.
Donc, je ne dis pas que ce n'est pas un problème, mais la liste complète des caractères "autorisés dans certaines conditions / tout / aucun" est (presque) tous les caractères dans toutes les langues. Si vous souhaitez "accepter toutes les adresses e-mail valides (et beaucoup aussi non valides)", vous devez prendre en compte l'IDN, ce qui rend fondamentalement une approche basée sur les caractères inutile (désolé), sauf si vous convertissez d' abord les adresses e-mail internationalisées en Punycode .
Après cela, vous pouvez suivre (la plupart) les conseils ci-dessus.
la source
Le format de l'adresse e-mail est le suivant:
local-part@domain-part
(max. 64 @ 255 caractères, plus 256 au total).Le
local-part
etdomain-part
pourrait avoir un ensemble différent de caractères autorisés, mais ce n'est pas tout, car il y a plus de règles.En général, la partie locale peut avoir ces caractères ASCII:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(pas le premier ou le dernier caractère ou répété sauf si cité),"(),:;<>@[\]
(avec certaines restrictions),()
(sont autorisés entre parenthèses, par exemple(comment)[email protected]
).Partie du domaine:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(pas le premier ou le dernier caractère),jsmith@[192.168.2.1]
oujsmith@[IPv6:2001:db8::1]
.Ces adresses e-mail sont valides:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(partie locale d'une lettre)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(nom de domaine local sans domaine de premier niveau)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(espace entre les guillemets)example@localhost
(envoyé par localhost)[email protected]
(voir la liste des domaines de premier niveau Internet )user@com
user@localserver
user@[IPv6:2001:db8::1]
Et ces exemples de non valide:
Abc.example.com
(pas de@
caractère)A@b@[email protected]
(un seul@
est autorisé en dehors des guillemets)a"b(c)d,e:f;gi[j\k][email protected]
(aucun des caractères spéciaux de cette partie locale n'est autorisé en dehors des guillemets)just"not"[email protected]
(les chaînes entre guillemets doivent être séparées par des points ou le seul élément constituant la partie locale)this is"not\[email protected]
(les espaces, les guillemets et les barres obliques inverses ne peuvent exister que dans les chaînes entre guillemets et précédés d'une barre oblique inverse)this\ still\"not\[email protected]
(même s'ils sont échappés (précédés d'une barre oblique inverse), les espaces, les guillemets et les barres obliques inverses doivent toujours être contenus par des guillemets)[email protected]
(double point avant@
); (avec mise en garde: Gmail laisse passer cela)[email protected]
(double point après@
)Source: adresse e-mail sur Wikipedia
RFC2822 regex de Perl pour valider les e-mails:
Voir aussi: RFC 822 Email Address Parser en PHP .
Les définitions officielles des adresses e-mail sont les suivantes:
En relation:
la source
[email protected]
et appelez-le un jour.Wikipedia a un bon article à ce sujet , et les spécifications officielles sont ici . De Wikipdia:
la source
Google fait une chose intéressante avec ses adresses gmail.com. Les adresses gmail.com n'autorisent que les lettres (az), les chiffres et les points (qui sont ignorés).
par exemple, [email protected] est identique à [email protected], et les deux adresses e-mail seront envoyées à la même boîte aux lettres. [email protected] est également livré dans la même boîte aux lettres.
Donc, pour répondre à la question, cela dépend parfois de l'implémenteur de la quantité de normes RFC qu'ils souhaitent suivre. Le style d'adresse gmail.com de Google est compatible avec les normes. Ils le font de cette façon pour éviter toute confusion où différentes personnes prendraient des adresses e-mail similaires, par exemple
Le lien wikipedia est une bonne référence sur ce que les adresses e-mail permettent généralement. http://en.wikipedia.org/wiki/Email_address
la source
{john'doe}@my.server
sans problème. Testé également avec le serveur hMail.{piotr'kula}@kula.solutions
- Si cela fonctionne, vous obtiendrez un bon formulaire de réponse automatique. Sinon, rien ne se passera.Vous pouvez commencer à partir d'un article wikipedia :
la source
Nom:
Serveur:
la source
<>
et[]
? Par exemple"()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?Vérifiez @ et. puis envoyez un e-mail pour qu'ils vérifient.
Je ne peux toujours pas utiliser mon adresse e-mail .name sur 20% des sites sur Internet parce que quelqu'un a raté sa validation par e-mail ou parce qu'elle est antérieure à la validité des nouvelles adresses.
la source
La réponse courte est qu'il y a 2 réponses. Il y a une norme pour ce que vous devez faire. c'est-à-dire un comportement sage qui vous évitera des ennuis. Il existe une autre norme (beaucoup plus large) pour le comportement que vous devez accepter sans problème. Cette dualité fonctionne pour l'envoi et l'acceptation de courriels mais a une large application dans la vie.
Pour un bon guide des adresses que vous créez; voir: http://www.remote.org/jochen/mail/info/chars.html
Pour filtrer les e-mails valides, transmettez simplement tout ce qui est suffisamment compréhensible pour voir la prochaine étape. Ou commencez à lire un tas de RFC, attention, voici des dragons.
la source
Une bonne lecture à ce sujet .
Extrait:
la source
Joe.\\[email protected]
sans guillemets. Est-ce réellement valable? Cela ne semble pas clair étant donné les réponses ici, mais je pose la question parce que j'ai vu des cas (très rares) de chaînes de messagerie DNS SoA rname qui contiennent des barres obliques inverses.La réponse acceptée fait référence à un article de Wikipédia lors de la discussion de la partie locale valide d'une adresse e-mail, mais Wikipédia n'est pas une autorité à ce sujet.
IETF RFC 3696 est une autorité en la matière et doit être consultée à la section 3. Restrictions sur les adresses e-mail à la page 5:
Comme d'autres l'ont fait, je soumets une expression régulière qui fonctionne à la fois pour PHP et JavaScript pour valider les adresses e-mail:
la source
Comme on peut le trouver dans ce lien Wikipedia
la source
La réponse est (presque)
ALL
(ASCII 7 bits).Si les règles d'inclusion sont "... autorisées sous certaines conditions / toutes / aucune ..."
En examinant simplement l'une des nombreuses règles d'inclusion possibles pour le texte autorisé dans la partie "texte de domaine" de la RFC 5322 en haut de la page 17, nous trouvons:
les trois seuls caractères manquants dans cette description sont utilisés dans le domaine littéral
[]
, pour former une paire entre guillemets\
, et le caractère d'espace blanc(% d32). Avec cela, toute la plage 32-126 (décimale) est utilisée. Une exigence similaire apparaît comme "qtext" et "ctext". De nombreux caractères de contrôle sont également autorisés / utilisés. Une liste de ces caractères de contrôle apparaît à la page 31 section 4.1 de la RFC 5322 en tant que obs-NO-WS-CTL.
Tous ces caractères de contrôle sont autorisés comme indiqué au début de la section 3.5:
Et une telle règle d'inclusion est donc "trop large". Ou, dans un autre sens, la règle attendue est "trop simpliste".
la source
Par souci de simplicité, je désinfecte la soumission en supprimant tout le texte entre guillemets doubles et les guillemets environnants associés avant la validation, en mettant le kibosh sur les soumissions d'adresse e-mail en fonction de ce qui n'est pas autorisé. Juste parce que quelqu'un peut avoir le John .. "Le * $ hizzle * Bizzle" .. L'adresse [email protected] ne signifie pas que je dois l'autoriser dans mon système. Nous vivons dans le futur où il faudra peut-être moins de temps pour obtenir une adresse e-mail gratuite que pour faire un bon travail en essuyant vos fesses. Et ce n'est pas comme si les critères de courrier électronique n'étaient pas collés juste à côté de l'entrée indiquant ce qui est et ce qui n'est pas autorisé.
Je désinfecte également ce qui n'est pas spécifiquement autorisé par divers RFC après que le matériel cité est supprimé. La liste des caractères et modèles spécifiquement interdits semble être une liste beaucoup plus courte à tester.
Interdit:
Dans l'exemple donné:
L'envoi d'un e-mail de confirmation au résultat restant lors d'une tentative d'ajout ou de modification de l'adresse e-mail est un bon moyen de voir si votre code peut gérer l'adresse e-mail soumise. Si l'e-mail réussit la validation après autant de cycles de désinfection que nécessaire, lancez cette confirmation. Si une demande revient du lien de confirmation, le nouvel e-mail peut être déplacé du statut de purgatoire ou de stockage || temporaire || pour devenir un véritable e-mail stocké de première classe.
Une notification d'échec ou de réussite du changement d'adresse e-mail peut être envoyée à l'ancienne adresse e-mail si vous voulez être prévenant. Les configurations de compte non confirmées peuvent tomber du système en tant que tentatives infructueuses entièrement après un laps de temps raisonnable.
Je n'autorise pas les e-mails stinkhole sur mon système, peut-être que c'est simplement jeter de l'argent. Mais, 99,9% du temps, les gens font juste ce qu'il faut et ont un e-mail qui ne repousse pas les limites de conformité au bord du gouffre en utilisant des scénarios de compatibilité avec les cas limites. Faites attention aux DDoS regex, c'est un endroit où vous pouvez avoir des ennuis. Et cela est lié à la troisième chose que je fais, je mets une limite à la durée pendant laquelle je suis prêt à traiter un seul e-mail. Si elle doit ralentir ma machine pour être validée, elle ne dépasse pas la logique du point de terminaison de mon API de données entrantes.
Edit: Cette réponse a continué à être teintée d'être "mauvaise", et peut-être qu'elle le méritait. Peut-être que c'est encore mauvais, peut-être pas.
la source
Dans mon PHP, j'utilise cette vérification
essayez-le vous-même http://phpfiddle.org/main/code/9av6-d10r
la source
J'ai créé cette expression régulière selon les directives RFC:
la source
Gmail n'autorisera que le signe + en tant que caractère spécial et dans certains cas (.), Mais aucun autre caractère spécial n'est autorisé sur Gmail. Les RFC indiquent que vous pouvez utiliser des caractères spéciaux, mais vous devez éviter d'envoyer des messages à Gmail avec des caractères spéciaux.
la source