{"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 eige\u00adner Sache: Mail\u00adadres\u00adsen weni\u00adger w\u00fctend vali\u00addie\u00adren mit libvld\u00admail."},"content":{"rendered":"<p>Immer nur auf Web\u00adstan\u00addards her\u00adum\u00adzu\u00adhacken ist auf Dau\u00ader etwas ein\u00adt\u00f6\u00adnig. Dar\u00adum hacke ich heu\u00adte ein\u00admal auf einer ande\u00adren Grup\u00adpe von Stan\u00addards her\u00adum: Mail\u00adadres\u00adsen.<\/p>\n<p><!--more-->E\u2011Mail-Adres\u00adsen \u2013 das haben sie \u201eMes\u00adsen\u00adgern\u201c und der\u00adglei\u00adchen vor\u00adaus \u2013 sind bekannt\u00adlich oft lang\u00adle\u00adbig, so man\u00adcher Mensch im Bekann\u00adten\u00adkreis k\u00f6nn\u00adte eine E\u2011Mail-Adres\u00adse haben, deren Alter zwei Jahr\u00adzehn\u00adte bereits erreicht hat. Vie\u00adle der heu\u00adti\u00adgen Digi\u00adta\u00adli\u00adsier\u00adten waren damals noch gar nicht gebo\u00adren.<\/p>\n<p>Zugrun\u00adde lie\u00adgen, jeweils auf\u00adge\u00adteilt in ver\u00adschie\u00adde\u00adne RFC-Doku\u00admen\u00adte, zwei ver\u00adschie\u00adde\u00adne Stan\u00addards (einer f\u00fcr den Teil vor dem @, den so genann\u00adten \u201elocal part\u201c, und einer f\u00fcr den Teil nach dem @, den so genann\u00adten \u201edomain part\u201c), wobei mit dem Auf\u00adkom\u00admen von Uni\u00adcode\u00addo\u00admains bei\u00adde Stan\u00addards eine Erwei\u00adte\u00adrung beka\u00admen, die die Nut\u00adzung von UTF-8-Zei\u00adchen in bei\u00adden H\u00e4lf\u00adten optio\u00adnal erlau\u00adben, so lan\u00adge das \u201e@\u201c bestehen bleibt. Eini\u00adge der defi\u00adnie\u00adren\u00adden RFC-Doku\u00admen\u00adte die\u00adnen nur dem Zweck, die ande\u00adren RFC-Doku\u00admen\u00adte zu erkl\u00e4\u00adren: <a href=\"https:\/\/tools.ietf.org\/html\/rfc3696\">RFC 3696<\/a> etwa gibt einen gro\u00adben \u00dcber\u00adblick \u00fcber die Vali\u00addie\u00adrung von URL- und URI-For\u00adma\u00adten, sozu\u00adsa\u00adgen \u201ef\u00fcr Dum\u00admies\u201c. Das sowie\u00adso schon un\u00fcber\u00adsicht\u00adli\u00adche Regel\u00adwerk kennt wie\u00adder\u00adum so vie\u00adle Aus\u00adnah\u00admen, dass sogar in der eng\u00adlisch\u00adspra\u00adchi\u00adgen Wiki\u00adpe\u00addia bei\u00adspiel\u00adhaft Mail\u00adadres\u00adsen als \u201eung\u00fcl\u00adtig\u201c ste\u00adhen, von denen aller\u00addings anschei\u00adnend nie\u00admand \u2013 die RFCs ein\u00adge\u00adschlos\u00adsen \u2013 wei\u00df, war\u00adum.<\/p>\n<p>Hin\u00adzu kommt, dass zwi\u00adschen Stan\u00addard und geleb\u00adter Pra\u00adxis wie auch im Web ein gr\u00f6\u00ad\u00dfer wer\u00adden\u00adder Gra\u00adben auf\u00adge\u00adtan wur\u00adde, oft inner\u00adhalb des\u00adsel\u00adben Dien\u00adstes; so unter\u00adst\u00fctzt etwa die Web\u00adober\u00adfl\u00e4\u00adche von Goog\u00adle Mail das Anle\u00adgen von Mail\u00adadres\u00adsen mit Son\u00adder\u00adzei\u00adchen dar\u00adin nicht, der dazu geh\u00f6\u00adren\u00adde Mail\u00adser\u00adver aller\u00addings \u2013 tech\u00adnisch gese\u00adhen \u2013 durch\u00adaus. Eine Vali\u00addie\u00adrung nach dem Kri\u00adte\u00adri\u00adum, wel\u00adche Mail\u00adadres\u00adsen <em>der eige\u00adne Anbie\u00adter<\/em> f\u00fcr \u201eg\u00fcl\u00adtig\u201c h\u00e4lt, ist aller\u00addings ohne direk\u00adten Zugriff auf die\u00adse Mail\u00adser\u00adver nicht ohne wei\u00adte\u00adres m\u00f6g\u00adlich.<\/p>\n<p>Als w\u00e4ren die Stan\u00addards nicht auch ohne sol\u00adche Spe\u00adrenz\u00adchen merk\u00adw\u00fcr\u00addig genug. Es gilt zum Bei\u00adspiel die Regel, dass sehr wohl bestimm\u00adte Zei\u00adchen oder Zei\u00adchen\u00adfol\u00adgen nach\u00adtr\u00e4g\u00adlich als \u201eung\u00fcl\u00adtig\u201c (<em>depre\u00adca\u00adted<\/em>) gekenn\u00adzeich\u00adnet wer\u00adden k\u00f6n\u00adnen, was aber <em>nat\u00fcr\u00adlich<\/em> nicht hei\u00dft, dass man sei\u00adne alten Mail\u00adadres\u00adsen nicht mehr wei\u00adter\u00adbe\u00adnut\u00adzen darf. Ein Bei\u00adspiel: Ich h\u00e4t\u00adte mir vor lan\u00adger Zeit die Mail\u00adadres\u00adse <tt>musik.ist.\u201esupi\u201c@provider.tld<\/tt> anle\u00adgen k\u00f6n\u00adnen. Da gem\u00e4\u00df <a href=\"https:\/\/tools.ietf.org\/html\/rfc5322\">RFC 5322<\/a> von einer Kom\u00adbi\u00adna\u00adti\u00adon aus Text inner\u00adhalb <em>und<\/em> au\u00dfer\u00adhalb von Anf\u00fch\u00adrungs\u00adzei\u00adchen im \u201elocal part\u201c aber inzwi\u00adschen abge\u00adra\u00adten wird, d\u00fcrf\u00adte ich sie bei einem Anbie\u00adter, der sich strikt an den Stan\u00addard h\u00e4lt, nicht mehr anle\u00adgen \u2013 nur nut\u00adzen d\u00fcrf\u00adte ich sie noch, denn damit eine Mail\u00adadres\u00adse exi\u00adstie\u00adren kann, muss sie erst ein\u00admal g\u00fcl\u00adtig sein und soll\u00adte damit eben auch \u00fcber\u00adall akzep\u00adtiert wer\u00adden. <em>Schr\u00f6\u00addin\u00adgers Mail\u00adadres\u00adse.<\/em><\/p>\n<p>Wie man erken\u00adnen kann, ist die regel\u00adkon\u00adfor\u00adme Vali\u00addie\u00adrung eine sehr anstren\u00adgen\u00adde Arbeit. Eine Abdeckung der Stan\u00addards mit einem regu\u00adl\u00e4\u00adren Aus\u00addruck, wie es im Web gemein\u00adhin emp\u00adfoh\u00adlen wird, w\u00e4re ver\u00admut\u00adlich mach\u00adbar, aber kaum mehr ver\u00adn\u00fcnf\u00adtig les\u00adbar. Selbst\u00adver\u00adst\u00e4nd\u00adlich k\u00f6nn\u00adte sich <em>die Mensch\u00adheit<\/em> auch dar\u00adauf eini\u00adgen, dass in E\u2011Mail-Adres\u00adsen nur ein klei\u00adner Teil des ASCII-Zei\u00adchen\u00adsat\u00adzes erlaubt sein darf, oder eine E\u2011Mail-Adres\u00adse vali\u00adde ist, sobald genau ein ein\u00adzi\u00adges \u201e@\u201c dar\u00adin vor\u00adkommt, aber der Sinn hin\u00adter Stan\u00addards ist es ja, dass <em>die Mensch\u00adheit<\/em> nicht beson\u00adders gut dar\u00adin ist, sich ohne auf\u00adge\u00adschrie\u00adbe\u00adne Regeln auf irgend\u00adet\u00adwas zu eini\u00adgen.<\/p>\n<p>Um selbst k\u00fcnf\u00adtig ein wenig weni\u00adger genervt von die\u00adsem Wild\u00adwuchs zu sein, habe ich <tt>libvld\u00admail<\/tt> pro\u00adgram\u00admiert. Hier\u00adbei han\u00addelt es sich um eine por\u00adta\u00adble Biblio\u00adthek ohne beson\u00adde\u00adre Abh\u00e4n\u00adgig\u00adkei\u00adten mit einem kom\u00adpak\u00adten API, deren ein\u00adzi\u00adger Zweck es ist, E\u2011Mail-Adres\u00adsen stan\u00addard\u00adkon\u00adform als \u201eist vali\u00adde\u201c oder \u201eist nicht vali\u00adde\u201c zu kenn\u00adzeich\u00adnen. Die Biblio\u00adthek ist ver\u00admut\u00adlich noch nicht ganz fer\u00adtig, aber durch\u00adaus schon funk\u00adti\u00adons\u00adf\u00e4\u00adhig. Der Quell\u00adcode liegt bis auf Wei\u00adte\u00adres auf <a href=\"https:\/\/github.com\/dertuxmalwieder\/libvldmail\">Git\u00adHub<\/a> her\u00adum, je nach Erfolg oder Miss\u00aderfolg schlie\u00ad\u00dfe ich aber einen Wech\u00adsel zu einer ande\u00adren Platt\u00adform nicht aus. Git\u00adHub ist mir <a href=\"https:\/\/tuxproject.de\/blog\/2018\/02\/open-source-schlaeft-ein-und-der-feminismus-traegt-die-schuld-daran\/\">zutiefst unsym\u00adpa\u00adthisch.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Immer nur auf Web\u00adstan\u00addards her\u00adum\u00adzu\u00adhacken ist auf Dau\u00ader etwas ein\u00adt\u00f6\u00adnig. Dar\u00adum hacke ich heu\u00adte ein\u00admal auf einer ande\u00adren Grup\u00adpe von Stan\u00addards her\u00adum: Mail\u00adadres\u00adsen.<\/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,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[19,5],"tags":[],"series":[],"class_list":["post-13584","post","type-post","status-publish","format-standard","hentry","category-nerdkrams","category-projekte"],"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}]}}