サンプルコード
SendGridでよく利用するテキストメール/HTMLメール/テンプレートを利用したメール配信のサンプルコードです。
テキストメール/HTMLメールを分けていますが、両方mail.SGMailV3.AddContent
する事でマルチパートメールにする事も可能です。
※ 実行するには環境変数(SENDGRID_API_KEY、SENDGRID_TEMPLATE_ID)が必要です。
package main import ( "log" "os" "github.com/sendgrid/sendgrid-go" "github.com/sendgrid/sendgrid-go/helpers/mail" ) var MailClient *sendgrid.Client func init() { MailClient = sendgrid.NewSendClient(os.Getenv("SENDGRID_API_KEY")) } type User struct { Name string Email string } func (user *User) GetPersonalization() *mail.Personalization { personalization := mail.NewPersonalization() personalization.AddTos(user.GetEmail()) return personalization } func (user *User) GetEmail() *mail.Email { return mail.NewEmail(user.Name, user.Email) } func GetUsers() []*User { return []*User{ &User{ Name: "User1", Email: "user1@example.com", }, &User{ Name: "User2", Email: "user2@example.com", }, } } func NewMail(from *mail.Email) *mail.SGMailV3 { message := mail.NewV3Mail() message.SetFrom(from) return message } func SendMail(message *mail.SGMailV3) { response, err := MailClient.Send(message) if err != nil { log.Println(err) } else { log.Println(response.StatusCode) log.Println(response.Body) log.Println(response.Headers) } } func main() { from := mail.NewEmail("FromName", "from@example.com") users := GetUsers() // テキストメールの配信 plainTextMail := NewMail(from) plainTextMail.Subject = "Sample Text Mail" textContent := mail.NewContent("text/plain", "こんにちは、%name% さん!") plainTextMail.AddContent(textContent) for _, user := range users { personalization := user.GetPersonalization() personalization.SetSubstitution("%name%", user.Name) plainTextMail.AddPersonalizations(personalization) } SendMail(plainTextMail) // HTMLメールの配信 htmlMail := NewMail(from) htmlMail.Subject = "Sample HTML Mail" htmlContent := mail.NewContent("text/html", "こんにちは、<strong> %name% </strong>さん!") htmlMail.AddContent(htmlContent) for _, user := range users { personalization := user.GetPersonalization() personalization.SetSubstitution("%name%", user.Name) htmlMail.AddPersonalizations(personalization) } SendMail(htmlMail) // SendGridのDynamicTemplateを利用したメールの配信 templateMail := NewMail(from) templateMail.TemplateID = os.Getenv("SENDGRID_TEMPLATE_ID") // Subject,Contentはテンプレートで指定 for _, user := range users { // テンプレート内で展開する変数の定義 data := make(map[string]interface{}) data["name"] = user.Name personalization := user.GetPersonalization() personalization.DynamicTemplateData = data templateMail.AddPersonalizations(personalization) } SendMail(templateMail) }
Reply-to(返信先)を指定したい
送信元とは別のメールアドレスに返信させたい場合はReply-toを指定します。
replyTo := mail.NewEmail("ReplyToName", "reply@example.com") plainTextMail.SetReplyTo(replyTo) SendMail(plainTextMail)
ファイルを添付したい
ファイルを添付する場合は*mail.Attachment
にファイルのデータを設定してAddAttachment
することで添付できます。
attachment := mail.NewAttachment() file, _ := os.OpenFile("./0123.jpeg", os.O_RDONLY, 0600) defer file.Close() data, _ := ioutil.ReadAll(file) dataEnc := base64.StdEncoding.EncodeToString(data) attachment.SetContent(dataEnc) attachment.SetType("image/jpeg") attachment.SetFilename("image.jpeg") attachment.SetDisposition("attachment") plainTextMail.AddAttachment(attachment) SendMail(plainTextMail)