Sending Gopher Emails
So you want to send some email. And you’re using Go. Do I have some great news for you! I have done this, and you can too. We’re going to build a tool that I’ve appropriately named send-a-gopher which, unsurprisingly, sends you (well, somebody) a gopher.
This tutorial assumes you already have a SparkPost account and have created an API key. And that you’ve got Go installed on your system.
First! Pick a gopher to send
This is undoubtedly the hardest part. After careful consideration, and a quick right click, copy image address, there’s your gopher. Oh, right. We need some code too.
res, _ := http.Get(imgUrl) // get the image
Et voila! An extremely limited in-memory version of curl/wget/etc! We can now get gophers.
Second! Set up the SparkPost package
Installing the package is arguably the easiest part:
$ go get github.com/SparkPost/gosparkpost
And that’s it. Next we’ll import and configure the SparkPost package:
cfg := &gosp.Config{ApiKey: os.Getenv(“SPARKPOST_API_KEY”) var sp gosp.Client sp.Init(cfg)
Third! Encase the gopher in code
We’ll get it from the HTTP response, wrap it up in an InlineImage and some Content, then send that off in a Transmission:
body, _ := ioutil.ReadAll(res.Body) ctype := http.DetectContentType(body) filename := path.Base(imgUrl) iimg := gosp.InlineImage{ MIMEType: ctype, Filename: filename, B64Data: base64.StdEncoding.EncodeToString(body), } html := fmt.Sprintf(`Here's that gopher you maybe asked for!<br/><img src="cid:%s" />`, filename) content := gosp.Content{ From: *from, Subject: "That gopher", HTML: html, } content.InlineImages = append(content.InlineImages, iimg) tx := &gosp.Transmission{ Content: content, Recipients: []string{*to}, } id, _, err := sp.Send(tx)
Last! Send, and admire your handiwork
This is the second easiest part:
$ ./send-a-gopher 2017/11/17 15:12:30 Successfully sent nothing, but that's probably not what you wanted? Check out the --url option.
Er, you get the idea.
$ ./send-a-gopher --url https://blog.golang.org/gopher/usergroups.png \ --from gopher@sparkpost.com --to bill.murray@example.com
Look at you now. With a free account and just a little bit of code, you’re sending yourself gophers. That was pretty easy, and there are more sending examples in our GitHub repository, specifically in the sparks tool, along with the complete version of the code we’ve dissected here. It even handles errors.
-Dave Gray