NerdkramsProjekte
In eige­ner Sache: Mail­adres­sen weni­ger wütend vali­die­ren mit libvldmail.

Immer nur auf Web­stan­dards her­um­zu­hacken ist auf Dau­er etwas ein­tö­nig. Dar­um hacke ich heu­te ein­mal auf einer ande­ren Grup­pe von Stan­dards her­um: Mailadressen.

E‑Mail-Adres­sen – das haben sie „Mes­sen­gern“ und der­glei­chen vor­aus – sind bekannt­lich oft lang­le­big, so man­cher Mensch im Bekann­ten­kreis könn­te eine E‑Mail-Adres­se haben, deren Alter zwei Jahr­zehn­te bereits erreicht hat. Vie­le der heu­ti­gen Digi­ta­li­sier­ten waren damals noch gar nicht geboren.

Zugrun­de lie­gen, jeweils auf­ge­teilt in ver­schie­de­ne RFC-Doku­men­te, zwei ver­schie­de­ne Stan­dards (einer für den Teil vor dem @, den so genann­ten „local part“, und einer für den Teil nach dem @, den so genann­ten „domain part“), wobei mit dem Auf­kom­men von Uni­code­do­mains bei­de Stan­dards eine Erwei­te­rung beka­men, die die Nut­zung von UTF-8-Zei­chen in bei­den Hälf­ten optio­nal erlau­ben, so lan­ge das „@“ bestehen bleibt. Eini­ge der defi­nie­ren­den RFC-Doku­men­te die­nen nur dem Zweck, die ande­ren RFC-Doku­men­te zu erklä­ren: RFC 3696 etwa gibt einen gro­ben Über­blick über die Vali­die­rung von URL- und URI-For­ma­ten, sozu­sa­gen „für Dum­mies“. Das sowie­so schon unüber­sicht­li­che Regel­werk kennt wie­der­um so vie­le Aus­nah­men, dass sogar in der eng­lisch­spra­chi­gen Wiki­pe­dia bei­spiel­haft Mail­adres­sen als „ungül­tig“ ste­hen, von denen aller­dings anschei­nend nie­mand – die RFCs ein­ge­schlos­sen – weiß, warum.

Hin­zu kommt, dass zwi­schen Stan­dard und geleb­ter Pra­xis wie auch im Web ein grö­ßer wer­den­der Gra­ben auf­ge­tan wur­de, oft inner­halb des­sel­ben Dien­stes; so unter­stützt etwa die Web­ober­flä­che von Goog­le Mail das Anle­gen von Mail­adres­sen mit Son­der­zei­chen dar­in nicht, der dazu gehö­ren­de Mail­ser­ver aller­dings – tech­nisch gese­hen – durch­aus. Eine Vali­die­rung nach dem Kri­te­ri­um, wel­che Mail­adres­sen der eige­ne Anbie­ter für „gül­tig“ hält, ist aller­dings ohne direk­ten Zugriff auf die­se Mail­ser­ver nicht ohne wei­te­res möglich.

Als wären die Stan­dards nicht auch ohne sol­che Spe­renz­chen merk­wür­dig genug. Es gilt zum Bei­spiel die Regel, dass sehr wohl bestimm­te Zei­chen oder Zei­chen­fol­gen nach­träg­lich als „ungül­tig“ (depre­ca­ted) gekenn­zeich­net wer­den kön­nen, was aber natür­lich nicht heißt, dass man sei­ne alten Mail­adres­sen nicht mehr wei­ter­be­nut­zen darf. Ein Bei­spiel: Ich hät­te mir vor lan­ger Zeit die Mail­adres­se musik.ist.„supi“@provider.tld anle­gen kön­nen. Da gemäß RFC 5322 von einer Kom­bi­na­ti­on aus Text inner­halb und außer­halb von Anfüh­rungs­zei­chen im „local part“ aber inzwi­schen abge­ra­ten wird, dürf­te ich sie bei einem Anbie­ter, der sich strikt an den Stan­dard hält, nicht mehr anle­gen – nur nut­zen dürf­te ich sie noch, denn damit eine Mail­adres­se exi­stie­ren kann, muss sie erst ein­mal gül­tig sein und soll­te damit eben auch über­all akzep­tiert wer­den. Schrö­din­gers Mailadresse.

Wie man erken­nen kann, ist die regel­kon­for­me Vali­die­rung eine sehr anstren­gen­de Arbeit. Eine Abdeckung der Stan­dards mit einem regu­lä­ren Aus­druck, wie es im Web gemein­hin emp­foh­len wird, wäre ver­mut­lich mach­bar, aber kaum mehr ver­nünf­tig les­bar. Selbst­ver­ständ­lich könn­te sich die Mensch­heit auch dar­auf eini­gen, dass in E‑Mail-Adres­sen nur ein klei­ner Teil des ASCII-Zei­chen­sat­zes erlaubt sein darf, oder eine E‑Mail-Adres­se vali­de ist, sobald genau ein ein­zi­ges „@“ dar­in vor­kommt, aber der Sinn hin­ter Stan­dards ist es ja, dass die Mensch­heit nicht beson­ders gut dar­in ist, sich ohne auf­ge­schrie­be­ne Regeln auf irgend­et­was zu einigen.

Um selbst künf­tig ein wenig weni­ger genervt von die­sem Wild­wuchs zu sein, habe ich libvld­mail pro­gram­miert. Hier­bei han­delt es sich um eine por­ta­ble Biblio­thek ohne beson­de­re Abhän­gig­kei­ten mit einem kom­pak­ten API, deren ein­zi­ger Zweck es ist, E‑Mail-Adres­sen stan­dard­kon­form als „ist vali­de“ oder „ist nicht vali­de“ zu kenn­zeich­nen. Die Biblio­thek ist ver­mut­lich noch nicht ganz fer­tig, aber durch­aus schon funk­ti­ons­fä­hig. Der Quell­code liegt bis auf Wei­te­res auf Git­Hub her­um, je nach Erfolg oder Miss­erfolg schlie­ße ich aber einen Wech­sel zu einer ande­ren Platt­form nicht aus. Git­Hub ist mir zutiefst unsym­pa­thisch.

Senfecke:

Comments are closed.

https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_smilenew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_biggrin2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_sadnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_eek.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_shocked.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_confusednew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_coolnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_lol.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_madnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_aufsmaul.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_seb_zunge.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_blushnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_frown.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil1.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_twistedevil2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/icon_mad.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_rolleyesnew.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_wink2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_idea2.gif  https://tuxproject.de/blog/wp-content/plugins/wp-monalisa/icons/smiley_emoticons_arrow2.gif 
mehr...
 

Erlaubte Tags:
<strong> <em> <pre> <code> <a href="" title=""> <img src="" title="" alt=""> <blockquote> <q> <b> <i> <del> <span style=""> <strike>

Datenschutzhinweis: Deine IP-Adresse wird nicht gespeichert. Details findest du hier.