SendGrid Helper Library to send emails very easily using Go.
Version 2.x.x
drops support for Go versions < 1.3.
Version 1.2.x
behaves differently in the AddTo
method. In the past this method defaulted to using the SMTPAPI
header. Now you must explicitly call the SMTPAPIHeader.AddTo
method. More on the SMTPAPI
section.
go get github.com/sendgrid/sendgrid-go
# Or pin the version with gopkg
go get gopkg.in/sendgrid/sendgrid-go.v1
echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env
echo "sendgrid.env" >> .gitignore
package main
import (
"fmt"
"github.com/sendgrid/sendgrid-go"
"os"
)
func main() {
sendgridKey := os.Getenv("SENDGRID_API_KEY")
if sendgridKey == "" {
fmt.Println("Environment variable SENDGRID_API_KEY is undefined. Did you forget to source sendgrid.env?")
os.Exit(1);
}
sg := sendgrid.NewSendGridClientWithApiKey(sendgridKey)
message := sendgrid.NewMail()
message.AddTo("[email protected]")
message.AddToName("SendGrid Community Dev Team")
message.SetSubject("SendGrid Testing")
message.SetText("WIN")
message.SetFrom("[email protected]")
if r := sg.Send(message); r == nil {
fmt.Println("Email sent!")
} else {
fmt.Println(r)
}
}
To begin using this library, call NewSendGridClientWithApiKey
with a SendGrid API Key.
sg := sendgrid.NewSendGridClientWithApiKey("sendgrid_api_key")
message := sendgrid.NewMail()
message.AddTo("[email protected]") // Returns error if email string is not valid RFC 5322
// or
address, _ := mail.ParseAddress("Example <[email protected]>")
message.AddRecipient(address) // Receives a vaild mail.Address
Same concept as regular recipient excepts the methods are:
- AddBcc
- AddBccRecipient
message.SetSubject("New email")
message.SetText("Add Text Here..")
//or
message.SetHTML("<html><body>Stuff, you know?</body></html>")
message.SetFrom("[email protected]")
message.AddAttachment("text.txt", file) // file needs to implement the io.Reader interface
//or
message.AddAttachmentFromStream("filename", "some file content")
message.AddContentID("id", "content")
SendGrid's X-SMTPAPI
If you wish to use the X-SMTPAPI on your own app, you can use the SMTPAPI Go library.
message.SMTPAPIHeader.AddTo("[email protected]")
// or
tos := []string{"[email protected]", "[email protected]"}
message.SMTPAPIHeader.AddTos(tos)
// or
message.SMTPAPIHeader.SetTos(tos)
message.AddSubstitution("key", "value")
// or
values := []string{"value1", "value2"}
message.AddSubstitutions("key", values)
//or
sub := make(map[string][]string)
sub["key"] = values
message.SetSubstitutions(sub)
message.AddSection("section", "value")
// or
sections := make(map[string]string)
sections["section"] = "value"
message.SetSections(sections)
message.AddCategory("category")
// or
categories := []string{"setCategories"}
message.AddCategories(categories)
// or
message.SetCategories(categories)
message.AddUniqueArg("key", "value")
// or
args := make(map[string]string)
args["key"] = "value"
message.SetUniqueArgs(args)
message.AddFilter("filter", "setting", "value")
// or
filter := &Filter{
Settings: make(map[string]string),
}
filter.Settings["enable"] = "1"
filter.Settings["text/plain"] = "You can haz footers!"
message.SetFilter("footer", filter)
message.JSONString() //returns a JSON string representation of the headers
Kudos to Matthew Zimmerman for this example.
###Tests
Please run the test suite in before sending a pull request.
go test -v
- Add Versioning
- Add proper support for BCC
##MIT License
Enjoy. Feel free to make pull requests :)