SendGrid Helper Library to send emails very easily using Go.
Version 1.1.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-gopackage main
import (
"fmt"
"github.com/sendgrid/sendgrid-go"
)
func main() {
sg := sendgrid.NewSendGridClient("sendgrid_user", "sendgrid_key")
message := sendgrid.NewMail()
message.AddTo("yamil@sendgrid.com")
message.AddToName("Yamil Asusta")
message.SetSubject("SendGrid Testing")
message.SetText("WIN")
message.SetFrom("yamil@sendgrid.com")
if r := sg.Send(message); r == nil {
fmt.Println("Email sent!")
} else {
fmt.Println(r)
}
}sg := sendgrid.NewSendGridClient("sendgrid_user", "sendgrid_key")message := sendgrid.NewMail()message.AddTo("example@sendgrid.com") // Returns error if email string is not valid RFC 5322
// or
address, _ := mail.ParseAddress("Example <example@sendgrid.com>")
message.AddRecipient(address) // Receives a vaild mail.AddressSame 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("example@lol.com")message.AddAttachment("text.txt", file) // file needs to implement the io.Reader interface
//or
message.AddAttachmentFromStream("filename", []byte("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("addTo@mailinator.com")
// or
tos := []string{"test@test.com", "test@email.com"}
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 headerspackage main
import (
"fmt"
"appengine/urlfetch"
"github.com/sendgrid/sendgrid-go"
)
func handler(w http.ResponseWriter, r *http.Request) {
sg := sendgrid.NewSendGridClient("sendgrid_user", "sendgrid_key")
c := appengine.NewContext(r)
// set http.Client to use the appengine client
sg.Client = urlfetch.Client(c) //Just perform this swap, and you are good to go.
message := sendgrid.NewMail()
message.AddTo("yamil@sendgrid.com")
message.SetSubject("SendGrid is Baller")
message.SetHTML("Simple Text")
message.SetFrom("kunal@sendgrid.com")
if r := sg.Send(message); r == nil {
fmt.Println("Email sent!")
} else {
c.Errorf("Unable to send mail %v",r)
}
}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 :)