[{"data":1,"prerenderedAt":281},["ShallowReactive",2],{"project-25440220":3},{"id":4,"name":5,"line":5,"line_source":6,"title":7,"url":8,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":43,"post_text":44,"what":45,"said":57,"maker_in_thread":150,"shape":162,"grid":166,"attempts":243,"same_week":244,"maker_shows":38,"maker_hidden":273,"reader_version":274,"card":275},"25440220","Deep Email Validator","title","Show HN: Deep Email Validator","https:\u002F\u002Fgithub.com\u002Fmfbx9da4\u002Fdeep-email-validator","github.com","mfbx9da4",1608106685,2020,51,34,1058,3028,35,"notable","dev_tools","email validation library","library",[23,24,25,26],"email validation","smtp check","mx record","email deliverability","mixed",-0.371,{"positive":30,"neutral":31,"mixed":32,"critical":33},3,8,0,10,21,{"execution":36,"idea":39,"docs":41,"performance":42},{"positive":37,"critical":38},2,5,{"positive":40,"critical":38},1,{"positive":32,"critical":32},{"positive":32,"critical":32},[40,40,40,38,40,32,30,30,32,32,32,30,32,32,38,40,40,30,38,32,30,40,32,32,40,40,32,32,40,32,30,30,30,32],null,{"problem":44,"audience":44,"pricing":44,"motivation":44,"time_to_build":44,"stack":46,"openness":55,"stage":56,"team_size":56},[47],{"value":48,"source":49,"evidence":50},"TypeScript","inferred",[51],{"id":52,"by":53,"text":54},"25441896","Veen","Yeah, looks like they're doing super-naive address validation: https:\u002F\u002Fgithub.com\u002Fmfbx9da4\u002Fdeep-email-validator\u002Fblob\u002Fmaster\u002Fsrc\u002Fregex\u002Fregex.ts","open_source","unknown",{"praise":58,"objections":74,"requests":119,"questions":134,"alternatives":145},[59,67],{"value":60,"source":61,"evidence":62},"Naive regex catches most syntax problems cheaply","commenter",[63],{"id":64,"by":65,"text":66},"25442020","Arnt","OTOH, that code looks as if it'll find the vast majority of the problems more careful analysis could find, both simply and without bad consequences. All that happens if that…",{"value":68,"source":61,"evidence":69},"Immediate feedback on typos is good UX",[70],{"id":71,"by":72,"text":73},"25452090","mewpmewp2","It is good UX to let user immediately know if they enter a typo or an e-mail that is bound to fail. It is a real waste of time if user enters wrong e-mail and keeps refreshing…",[75,86,97,108],{"value":76,"source":61,"evidence":77},"Email validation is unnecessary; verify by sending mail instead",[78,82],{"id":79,"by":80,"text":81},"25442813","madsbuch","For most applications email validation is really not nesecarry. instead a service can rely on email verification. If the address is invalid, mails sent to it will never arrive at…",{"id":83,"by":84,"text":85},"25446937","jedberg","There is exactly one right way to validate an email: send a message to it. Email is a very old protocol with a lot of hacks and backwards compatibility. At this point, pretty…",{"value":87,"source":61,"evidence":88},"Checking MX alone is wrong; RFC 5321 falls back to A\u002FAAAA records",[89,93],{"id":90,"by":91,"text":92},"25443241","runlevel1","Presence of an MX record should _not_ be used as a litmus test for a valid email domain. RFC 5321 section 5 specifies that you lookup the MX and, if absent, use the A\u002FAAAA…",{"id":94,"by":95,"text":96},"25442726","stevekemp","If an MX record isn't present you can fall back on the A-record. (If, and only if, no MX record for the domain is present, treat the domain as if it had an MX record with the…",{"value":98,"source":61,"evidence":99},"SMTP checks can break on catch-all or aliased addresses",[100,104],{"id":101,"by":102,"text":103},"25442693","sdfhbdf","Hopefully this doesn't get used in some kind of registration flow in full since for example if you register with an aliased address, or you have a catchall address or email is…",{"id":105,"by":106,"text":107},"25441923","that_guy_iain","I bet this would fail on my catch all email since it checks if the mailbox exists, right?",{"value":109,"source":61,"evidence":110},"Rejects valid but unusual addresses such as dotless domains and IPv6 literals",[111,115],{"id":112,"by":113,"text":114},"25441749","nickjj","The first line mentions: > Validates email looks like an email i.e. contains an \"@\" and a \".\" to the right of it. But what about emails coming from a hostname without a dot, or a…",{"id":116,"by":117,"text":118},"25442173","IgorPartola","foo@2001::01 is a valid email address, no? So is using the alternative dotless representation of the IPv4 addresses.",[120,127],{"value":121,"source":61,"evidence":122},"Describe it as an address validator rather than email validator",[123],{"id":124,"by":125,"text":126},"25443143","bo1024","You might save a little bit of confusion by calling it an email \"address\" validator.",{"value":128,"source":61,"evidence":129},"Support disposable email addresses rather than blocking them",[130],{"id":131,"by":132,"text":133},"25443200","293984j29384","I'm not a big fan of denying disposable email services. For that reason, I'll pass.",[135,141],{"value":136,"source":61,"evidence":137},"How does it handle timeouts?",[138],{"id":139,"by":140,"text":136},"25441893","ketamine__",{"value":142,"source":61,"evidence":143},"Will it fail on catch-all mailboxes?",[144],{"id":105,"by":106,"text":107},[146],{"value":147,"source":61,"evidence":148},"Email verification services that send a confirmation message",[149],{"id":79,"by":80,"text":81},{"comments":151,"answered":40,"key":152},4,[153,156,159],{"id":154,"text":155},"25494696","Also you will end up fucking your reputation by sending out emails to bad mailboxes all day long",{"id":157,"text":158},"25494633","It’s not a lot of work if you use a library. You will still need to do verification but saves you destroying your email domain reputation",{"id":160,"text":161},"25494636","Lol",{"commenters":163,"max_depth":38,"maker_replies":151,"first_comment_mins":164,"lifespan_hours":165},26,250,125,[167,169,170,171,173,174,177,180,181,184,187,190,193,196,200,203,205,208,212,214,215,217,218,220,223,225,226,227,231,233,234,235,238,241],[90,32,40,168,91,32],"project\u002Fcritical\u002Fexecution",[112,40,40,168,113,32],[52,40,40,168,53,32],[64,40,38,172,65,32],"project\u002Fpositive\u002Fexecution",[94,40,40,168,95,32],[175,40,32,176,65,32],"25444502","commenter\u002Fneutral\u002Fexecution",[178,40,30,179,140,32],"25441904","project\u002Fneutral\u002Fexecution",[116,40,30,179,117,32],[182,40,32,176,183,32],"25443172","chrismorgan",[185,40,32,176,186,32],"25444458","jcranmer",[188,40,32,189,183,32],"25445623","commenter\u002Fneutral\u002Fnone",[191,40,30,179,192,32],"25442185","chipsa",[194,40,32,189,195,32],"25443216","pul",[197,40,32,198,199,32],"25442221","other\u002Fneutral\u002Fnone","tyingq",[201,40,38,172,202,32],"25442305","m-p-3",[79,37,40,204,80,32],"project\u002Fcritical\u002Fidea",[206,37,40,204,207,32],"25443538","huhtenberg",[209,37,30,210,211,32],"25446784","project\u002Fneutral\u002Fidea","conradludgate",[71,37,38,213,72,32],"project\u002Fpositive\u002Fidea",[154,37,32,210,10,40],[124,30,30,216,125,32],"project\u002Fneutral\u002Fdocs",[101,151,40,204,102,32],[219,151,32,189,207,32],"25442805",[221,151,32,189,222,32],"25443158","edoceo",[224,151,40,168,207,32],"25443523",[83,38,40,204,84,32],[157,38,32,179,10,40],[228,229,32,189,230,32],"25441803",6,"amaurymartiny",[131,232,40,204,132,32],7,[160,232,32,198,10,40],[105,31,30,179,106,32],[236,31,30,179,237,32],"25446415","holstvoogd",[139,239,30,240,140,32],9,"project\u002Fneutral\u002Fperformance",[242,239,32,240,10,40],"25494650",[],[245,250,255,260,265,269],{"id":246,"name":247,"points":248,"category":249},"25372464","SongBox",647,"web_saas",{"id":251,"name":252,"points":253,"category":254},"25434753","33Mail",442,"productivity",{"id":256,"name":257,"points":258,"category":259},"25414389","Typesense Books Search",424,"data",{"id":261,"name":262,"points":263,"category":264},"25405259","A Book Like Foo",344,"learning_science",{"id":266,"name":267,"points":268,"category":19},"25429685","Polotno Studio",180,{"id":270,"name":271,"points":272,"category":19},"25394567","Devbook",168,false,"v2",{"id":276,"name":5,"line":5,"ai":273,"cat":19,"year":12,"points":13,"comments":14,"rec":27,"s":277,"top":17,"kw":278,"maker":10,"domain":9,"tier":18,"attempts":32,"strip":279,"url":8,"mix":280,"praise":60,"objection":76,"sub":20},25440220,-0.37,[23,24,25,26],"1115103300030051135031001100103330",[30,31,32,33],1794036599664]