Send email with SendGrid from Go (sendgrid-go v3)
The exact working pattern for sendgrid-go: mail helpers, NewSendClient from the environment, and reading StatusCode and Headers off the response. Not the full reference manual.
TL;DR: The exact working pattern for sendgrid-go: mail helpers, NewSendClient from the environment, and reading StatusCode and Headers off the response. Install: go get github.com/sendgrid/sendgrid-go. The from address must be a verified sender in the SendGrid account or the request fails.
The fix
- Install: go get github.com/sendgrid/sendgrid-go.
- Build and send: import ( "fmt" "log" "os" "github.com/sendgrid/sendgrid-go" "github.com/sendgrid/sendgrid-go/helpers/mail" ) from := mail.NewEmail("Your Name", "[YOURVERIFIEDSENDER]") // verified sender to := mail.NewEmail("Their Name", "[RECIPIENTEMAIL]") message := mail.NewSingleEmail(from, "subject here", to, "plain body", "[strong]html body[/strong]") client := sendgrid.NewSendClient(os.Getenv("SENDGRIDAPI_KEY")) response, err := client.Send(message) if err != nil { log.Println(err) } else { fmt.Println(response.StatusCode) // 202 means accepted fmt.Println(response.Headers) }
- NewSingleEmail takes from, subject, to, plain text, html. For multi-recipient or per-recipient data, build the v3 JSON with the mail helpers instead.
- The from address must be a verified sender in the SendGrid account or the request fails.
- Keep SENDGRIDAPIKEY in the environment. Do not hardcode it, and do not print the client config in logs.
When to use this
- This covers exactly what the title says: Send email with SendGrid from Go (sendgrid-go v3).
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.
When not to use this
- You are doing a different workflow with Send; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.
Compatibility
- Not pinned to a specific version; follows current Send behavior.