[{"data":1,"prerenderedAt":267},["ShallowReactive",2],{"project-7019049":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":35,"aspects":36,"strip":40,"post_text":42,"what":43,"said":74,"maker_in_thread":147,"shape":154,"grid":157,"attempts":226,"same_week":231,"maker_shows":41,"maker_hidden":259,"reader_version":260,"card":261},"7019049","email","Send emails easily in Go","title","Show HN: email - Send emails easily in Go","https:\u002F\u002Fgithub.com\u002Fjordan-wright\u002Femail#email","github.com","jwcrux",1389120854,2014,69,29,447,2272,20,"notable","languages","go email library","library",[24,5,25,26,27],"go","smtp","golang email library","send email","curious",0.048,{"positive":31,"neutral":32,"mixed":33,"critical":34},2,5,0,1,8,{"design":37,"privacy":38,"idea":39},{"positive":33,"critical":33},{"positive":33,"critical":34},{"positive":33,"critical":33},[41,33,41,33,33,33,33,33,41,34,33,32,32,33,33,41,41,33,33,33,33,33,33,33,33,33,33,33,33],3,null,{"problem":44,"audience":51,"pricing":42,"motivation":42,"time_to_build":42,"stack":59,"openness":73,"stage":73,"team_size":73},{"value":45,"source":46,"evidence":47},"Sending emails from Go code without building raw messages by hand","inferred",[48],{"id":49,"by":11,"text":50},"7020856","Thanks for the suggestions! 1) I worked to create the package such that other sending services can easily be used to send the email. By calling the .Bytes() function, you will…",{"value":52,"source":46,"evidence":53},"Go developers",[54,58],{"id":55,"by":56,"text":57},"7020413","curveship","I'm a novice at Go, but I've written several email libraries in other languages. Two lessons from that experience that I thought I'd pass on: - I've found it a more flexible…",{"id":49,"by":11,"text":50},[60,69],{"value":61,"source":62,"evidence":63},"Go","maker",[64,66],{"id":65},"post",{"id":67,"by":11,"text":68},"7021684","I am wrapping SendMail.. \"SendMail connects to the server at addr, switches to TLS if possible, authenticates with the optional mechanism a if possible, and then sends an email…",{"value":70,"source":62,"evidence":71},"net\u002Fsmtp",[72],{"id":67,"by":11,"text":68},"unknown",{"praise":75,"objections":84,"requests":107,"questions":120,"alternatives":129},[76],{"value":77,"source":78,"evidence":79},"Useful library that will make life easier","commenter",[80],{"id":81,"by":82,"text":83},"7019535","mratzloff","This looks great! It will definitely make my life easier. Thanks for sharing.",[85,96,103],{"value":86,"source":78,"evidence":87},"Constructor naming: NewEmail instead of New",[88,92],{"id":89,"by":90,"text":91},"7019235","tshadwell","Interesting choice of NewEmail() over the more idiomatic email.New().",{"id":93,"by":94,"text":95},"7020602","dradtke","Looks interesting. A couple suggestions: 1. People have already suggested this, but it would make more sense to make users call email.New() rather than email.NewEmail(). 2.…",{"value":97,"source":78,"evidence":98},"Sending Gmail passwords in plain text looks risky",[99],{"id":100,"by":101,"text":102},"7021656","zavi","Using plain text Gmail password looks like a red flag. ``` e.Send(\"smtp.gmail.com:587\", smtp.PlainAuth(\"\", \"test@gmail.com\", \"password123\", \"smtp.gmail.com\")) ```",{"value":104,"source":78,"evidence":105},"Required fields only checked at runtime",[106],{"id":55,"by":56,"text":57},[108,113],{"value":109,"source":78,"evidence":110},"Constructor that takes required fields or a single-pass struct creation",[111,112],{"id":55,"by":56,"text":57},{"id":93,"by":94,"text":95},{"value":114,"source":78,"evidence":115},"Plain-text email parsing support",[116],{"id":117,"by":118,"text":119},"7020919","yixizhang","The easiest way and properly the right way to send email is in plain text. I would be happier if the package can add a parser to read all meta data from text, in the way of HTTP…",[121],{"value":122,"source":78,"evidence":123},"Why NewEmail instead of New",[124,125],{"id":89,"by":90,"text":91},{"id":126,"by":127,"text":128},"7019282","dkuntz2","In Go isn't `email.NewEmail()` more idiomatic? To be fair, you could write: e = &email.Email{ [fields and values] } The only thing NewEmail does is give you a pointer to an Email.",[130,140],{"value":131,"source":78,"evidence":132},"gochimp Go client for Mandrill",[133,136],{"id":134,"by":11,"text":135},"7020419","https:\u002F\u002Fgithub.com\u002Fmattbaird\u002Fgochimp",{"id":137,"by":138,"text":139},"7020765","elithrar","Beat me to it. I've been using gochimp to send emails with Mandrill templates (using MergeVars) with much success. I send them async when a user creates their post and log the…",{"value":141,"source":78,"evidence":142},"go-guerrilla Go SMTP server",[143],{"id":144,"by":145,"text":146},"7019820","hendler","Here's a Go smtpd. https:\u002F\u002Fgithub.com\u002Fflashmob\u002Fgo-guerrilla",{"comments":32,"answered":34,"key":148},[149,150,153],{"id":49,"text":50},{"id":151,"text":152},"7020792","With regards to 1, it seems like I'm stuck between a rock and a hard place. I originally made the package in accordance to the docs I read which stated that if you are exporting…",{"id":134,"text":135},{"commenters":18,"max_depth":32,"maker_replies":32,"first_comment_mins":155,"lifespan_hours":156},28,10,[158,160,162,163,164,166,169,170,171,176,178,180,183,187,189,192,195,196,198,201,204,206,209,211,213,215,218,221,223],[55,33,41,159,56,33],"project\u002Fneutral\u002Fdesign",[49,33,33,161,11,34],"maker\u002Fneutral\u002Fdesign",[93,34,41,159,94,33],[151,34,33,161,11,34],[144,31,33,165,145,33],"other\u002Fneutral\u002Fnone",[167,41,33,165,168,33],"7020377","nodesocket",[134,41,33,165,11,34],[137,41,33,165,138,33],[172,173,41,174,175,33],"7019271",4,"project\u002Fneutral\u002Fnone","bnb",[100,32,34,177,101,33],"project\u002Fcritical\u002Fprivacy",[67,32,33,179,11,34],"project\u002Fneutral\u002Fprivacy",[81,181,32,182,82,33],6,"project\u002Fpositive\u002Fnone",[184,181,32,185,186,33],"7019798","maker\u002Fpositive\u002Fnone","Edmond",[188,181,33,165,82,33],"7020083",[190,181,33,165,191,33],"7020851","pkulak",[117,193,41,194,118,33],7,"project\u002Fneutral\u002Fidea",[89,35,41,159,90,33],[126,35,33,197,127,33],"commenter\u002Fneutral\u002Fdesign",[199,35,33,197,200,33],"7019304","ihsw",[202,35,33,197,203,33],"7020066","noselasd",[205,35,33,197,200,33],"7019296",[207,35,33,197,208,33],"7019452","staunch",[210,35,33,197,82,33],"7019499",[212,35,33,161,11,34],"7019300",[214,35,33,197,127,33],"7019307",[216,35,33,197,217,33],"7019438","DrJokepu",[219,35,33,197,220,33],"7020514","mseepgood",[222,35,33,197,217,33],"7020644",[224,35,33,165,225,33],"7020949","scott_s",[227,230],{"id":228,"t":229,"points":41,"comments":33},"7009853",1388806317,{"id":4,"t":12,"points":14,"comments":15},[232,237,241,246,251,255],{"id":233,"name":234,"points":235,"category":236},"7005348","Alpaca",268,"dev_tools",{"id":238,"name":239,"points":240,"category":236},"7023393","Codebox",136,{"id":242,"name":243,"points":244,"category":245},"7017580","Sneakers",114,"infrastructure",{"id":247,"name":248,"points":249,"category":250},"7007216","weather-explorer",85,"data",{"id":252,"name":253,"points":254,"category":20},"7010000","LINQ",84,{"id":256,"name":257,"points":14,"category":258},"7000159","Lentor","productivity",false,"v2",{"id":262,"name":5,"line":6,"ai":259,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":263,"top":18,"kw":264,"maker":11,"domain":10,"tier":19,"attempts":31,"strip":265,"url":9,"mix":266,"praise":77,"objection":86,"sub":21},7019049,0.05,[24,5,25,26,27],"30300000310550033000000000000",[31,32,33,34],1793990901308]