### 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](https://golang.org/dl/) on your system.

### First! Pick a gopher to send

This is undoubtedly the hardest part. After [careful consideration](https://www.google.com/search?q=golang+gopher&tbm=isch), 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](https://github.com/SparkPost/gosparkpost/), specifically in the [sparks](https://github.com/SparkPost/gosparkpost/tree/master/cmd/sparks) tool, along with [the complete version](https://github.com/SparkPost/gosparkpost/blob/master/cmd/send-a-gopher/main.go) of the code we’ve dissected here. It even handles errors.

\-Dave Gray