{"id":13584,"date":"2018-02-25T04:19:34","date_gmt":"2018-02-25T03:19:34","guid":{"rendered":"https:\/\/tuxproject.de\/blog\/?p=13584"},"modified":"2018-02-25T04:19:34","modified_gmt":"2018-02-25T03:19:34","slug":"in-eigener-sache-mailadressen-weniger-wuetend-validieren-mit-libvldmail","status":"publish","type":"post","link":"https:\/\/tuxproject.de\/blog\/2018\/02\/in-eigener-sache-mailadressen-weniger-wuetend-validieren-mit-libvldmail\/","title":{"rendered":"In eigener Sache: Mailadressen weniger w\u00fctend validieren mit libvldmail."},"content":{"rendered":"<p>Immer nur auf Web\u00adstan\u00addards herumzuhack\u00aden ist auf Dauer etwas ein\u00adt\u00f6nig. Darum hacke ich heute ein\u00admal auf ein\u00ader anderen Gruppe von Stan\u00addards herum: Mailadressen.<\/p>\n<p><!--more-->E\u2011Mail-Adressen \u2014 das haben sie \u201cMes\u00adsen\u00adgern\u201d und der\u00adgle\u00adichen voraus \u2014 sind bekan\u00adntlich oft lan\u00adglebig, so manch\u00ader Men\u00adsch im Bekan\u00adntenkreis k\u00f6n\u00adnte eine E\u2011Mail-Adresse haben, deren Alter zwei Jahrzehnte bere\u00adits erre\u00adicht hat. Viele der heuti\u00adgen Dig\u00adi\u00adtal\u00adisierten waren damals noch gar nicht geboren.<\/p>\n<p>Zugrunde liegen, jew\u00adeils aufgeteilt in ver\u00adschiedene RFC-Doku\u00admente, zwei ver\u00adschiedene Stan\u00addards (ein\u00ader f\u00fcr den Teil vor dem @, den so genan\u00adnten \u201clocal part\u201d, und ein\u00ader f\u00fcr den Teil nach dem @, den so genan\u00adnten \u201cdomain part\u201d), wobei mit dem Aufkom\u00admen von Uni\u00adcode\u00addo\u00admains bei\u00adde Stan\u00addards eine Erweiterung beka\u00admen, die die Nutzung von UTF-8-Zeichen in bei\u00adden H\u00e4lften option\u00adal erlauben, so lange das \u201c@\u201d beste\u00adhen bleibt. Einige der definieren\u00adden RFC-Doku\u00admente dienen nur dem Zweck, die anderen RFC-Doku\u00admente zu erk\u00adl\u00e4ren: <a href=\"https:\/\/tools.ietf.org\/html\/rfc3696\">RFC 3696<\/a> etwa gibt einen groben \u00dcberblick \u00fcber die Vali\u00addierung von URL- und URI-For\u00admat\u00aden, sozusagen \u201cf\u00fcr Dum\u00admies\u201d. Das sowieso schon un\u00fcber\u00adsichtliche Regel\u00adw\u00aderk ken\u00adnt wiederum so viele Aus\u00adnah\u00admen, dass sog\u00adar in der englis\u00adchsprachi\u00adgen Wikipedia beispiel\u00adhaft Mailadressen als \u201cung\u00fcltig\u201d ste\u00adhen, von denen allerd\u00adings anscheinend nie\u00admand \u2014 die RFCs eingeschlossen \u2014 wei\u00df, warum.<\/p>\n<p>Hinzu kommt, dass zwis\u00adchen Stan\u00addard und gelebter Prax\u00adis wie auch im Web ein gr\u00f6\u00dfer wer\u00adden\u00adder Graben aufge\u00adtan wurde, oft inner\u00adhalb des\u00adsel\u00adben Dien\u00adstes; so unter\u00adst\u00fctzt etwa die Webober\u00adfl\u00e4che von Google Mail das Anle\u00adgen von Mailadressen mit Son\u00adderze\u00adichen darin nicht, der dazu geh\u00f6rende Mailserv\u00ader allerd\u00adings \u2014 tech\u00adnisch gese\u00adhen \u2014 dur\u00adchaus. Eine Vali\u00addierung nach dem Kri\u00adteri\u00adum, welche Mailadressen <em>der eigene Anbi\u00adeter<\/em> f\u00fcr \u201cg\u00fcltig\u201d h\u00e4lt, ist allerd\u00adings ohne direk\u00adten Zugriff auf diese Mailserv\u00ader nicht ohne weit\u00aderes m\u00f6glich.<\/p>\n<p>Als w\u00e4ren die Stan\u00addards nicht auch ohne solche Speren\u00adzchen merk\u00adw\u00fcrdig genug. Es gilt zum Beispiel die Regel, dass sehr wohl bes\u00adtimmte Zeichen oder Zeichen\u00adfol\u00adgen nachtr\u00e4glich als \u201cung\u00fcltig\u201d (<em>dep\u00adre\u00adcat\u00aded<\/em>) gekennze\u00adich\u00adnet wer\u00adden k\u00f6n\u00adnen, was aber <em>nat\u00fcr\u00adlich<\/em> nicht hei\u00dft, dass man seine alten Mailadressen nicht mehr weit\u00ader\u00adbe\u00adnutzen darf. Ein Beispiel: Ich h\u00e4tte mir vor langer Zeit die Mailadresse <tt>musik.ist.\u201csupi\u201d@provider.tld<\/tt> anle\u00adgen k\u00f6n\u00adnen. Da gem\u00e4\u00df <a href=\"https:\/\/tools.ietf.org\/html\/rfc5322\">RFC 5322<\/a> von ein\u00ader Kom\u00adbi\u00adna\u00adtion aus Text inner\u00adhalb <em>und<\/em> au\u00dfer\u00adhalb von Anf\u00fchrungsze\u00adichen im \u201clocal part\u201d aber inzwis\u00adchen abger\u00adat\u00aden wird, d\u00fcrfte ich sie bei einem Anbi\u00adeter, der sich strikt an den Stan\u00addard h\u00e4lt, nicht mehr anle\u00adgen \u2014 nur nutzen d\u00fcrfte ich sie noch, denn damit eine Mailadresse existieren kann, muss sie erst ein\u00admal g\u00fcltig sein und sollte damit eben auch \u00fcber\u00adall akzep\u00adtiert wer\u00adden. <em>Schr\u00f6dingers Mailadresse.<\/em><\/p>\n<p>Wie man erken\u00adnen kann, ist die regelkon\u00adforme Vali\u00addierung eine sehr anstren\u00adgende Arbeit. Eine Abdeck\u00adung der Stan\u00addards mit einem reg\u00adul\u00e4ren Aus\u00addruck, wie es im Web gemein\u00adhin emp\u00adfohlen wird, w\u00e4re ver\u00admut\u00adlich mach\u00adbar, aber kaum mehr vern\u00fcn\u00adftig les\u00adbar. Selb\u00adstver\u00adst\u00e4ndlich k\u00f6n\u00adnte sich <em>die Men\u00adschheit<\/em> auch darauf eini\u00adgen, dass in E\u2011Mail-Adressen nur ein klein\u00ader Teil des ASCII-Zeichen\u00adsatzes erlaubt sein darf, oder eine E\u2011Mail-Adresse valide ist, sobald genau ein einziges \u201c@\u201d darin vorkommt, aber der Sinn hin\u00adter Stan\u00addards ist es ja, dass <em>die Men\u00adschheit<\/em> nicht beson\u00adders gut darin ist, sich ohne aufgeschriebene Regeln auf irgen\u00addet\u00adwas zu eini\u00adgen.<\/p>\n<p>Um selb\u00adst k\u00fcn\u00adftig ein wenig weniger gen\u00adervt von diesem Wild\u00adwuchs zu sein, habe ich <tt>lib\u00advld\u00admail<\/tt> pro\u00adgram\u00admiert. Hier\u00adbei han\u00addelt es sich um eine portable Bib\u00adlio\u00adthek ohne beson\u00addere Abh\u00e4ngigkeit\u00aden mit einem kom\u00adpak\u00adten API, deren einziger Zweck es ist, E\u2011Mail-Adressen stan\u00addard\u00adkon\u00adform als \u201cist valide\u201d oder \u201cist nicht valide\u201d zu kennze\u00adich\u00adnen. Die Bib\u00adlio\u00adthek ist ver\u00admut\u00adlich noch nicht ganz fer\u00adtig, aber dur\u00adchaus schon funk\u00adtions\u00adf\u00e4hig. Der Quell\u00adcode liegt bis auf Weit\u00aderes auf <a href=\"https:\/\/github.com\/dertuxmalwieder\/libvldmail\">GitHub<\/a> herum, je nach Erfolg oder Mis\u00adser\u00adfolg schlie\u00dfe ich aber einen Wech\u00adsel zu ein\u00ader anderen Plat\u00adtform nicht aus. GitHub ist mir <a href=\"https:\/\/tuxproject.de\/blog\/2018\/02\/open-source-schlaeft-ein-und-der-feminismus-traegt-die-schuld-daran\/\">zutief\u00adst unsym\u00adpa\u00adthisch.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Immer nur auf Web\u00adstan\u00addards herumzuhack\u00aden ist auf Dauer etwas ein\u00adt\u00f6nig. Darum hacke ich heute ein\u00admal auf ein\u00ader anderen Gruppe von Stan\u00addards herum: Mailadressen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[5,19],"tags":[],"series":[],"class_list":["post-13584","post","type-post","status-publish","format-standard","hentry","category-projekte","category-nerdkrams"],"share_on_mastodon":{"url":"","error":""},"wp-worthy-pixel":{"ignored":false,"public":null,"server":null,"url":null},"wp-worthy-type":"normal","_links":{"self":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/13584","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/comments?post=13584"}],"version-history":[{"count":0,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/posts\/13584\/revisions"}],"wp:attachment":[{"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/media?parent=13584"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/categories?post=13584"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/tags?post=13584"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/tuxproject.de\/blog\/wp-json\/wp\/v2\/series?post=13584"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}