📝

GoでSendGridからメール送信するサンプル実装

2022/04/23に公開

src/main/main.go

package main

import (
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"log"
	"os"
	"strings"

	"github.com/joho/godotenv"
	"github.com/sendgrid/sendgrid-go"
	"github.com/sendgrid/sendgrid-go/helpers/mail"
)

func main() {

	err_read := godotenv.Load()
	if err_read != nil {
		log.Fatalf("error: %v", err_read)
	}

	// .envから環境変数読み込み
	API_KEY := os.Getenv("API_KEY")
	TOS := strings.Split(os.Getenv("TOS"), ",")
	FROM := os.Getenv("FROM")

	// メッセージの構築
	message := mail.NewV3Mail()
	// 送信元を設定
	from := mail.NewEmail("", FROM)
	message.SetFrom(from)

	// 宛先と、対応するSubstitutionタグを指定
	p := mail.NewPersonalization()
	to := mail.NewEmail("", TOS[0])
	p.AddTos(to)
	p.SetSubstitution("%fullname%", "田中 太郎")
	p.SetSubstitution("%familyname%", "田中")
	p.SetSubstitution("%place%", "中野")
	message.AddPersonalizations(p)

	// 件名を設定
	message.Subject = "[sendgrid-go-example] フクロウのお名前は%fullname%さん"
	// テキストパートを設定
	c := mail.NewContent("text/plain", "%familyname% さんは何をしていますか?\r\n 彼は%place%にいます。")
	message.AddContent(c)
	// HTMLパートを設定
	c = mail.NewContent("text/html", "<strong> %familyname% さんは何をしていますか?</strong><br>彼は%place%にいます。")
	message.AddContent(c)

	// カテゴリ情報を付加
	message.AddCategories("category1")
	// カスタムヘッダを指定
	message.SetHeader("X-Sent-Using", "SendGrid-API")
	// 画像ファイルを添付
	a := mail.NewAttachment()
	file, _ := os.OpenFile("./gif.gif", os.O_RDONLY, 0600)
	defer file.Close()
	data, _ := ioutil.ReadAll(file)
	data_enc := base64.StdEncoding.EncodeToString(data)
	a.SetContent(data_enc)
	a.SetType("image/gif")
	a.SetFilename("owl.gif")
	a.SetDisposition("attachment")
	message.AddAttachment(a)

	// メール送信を行い、レスポンスを表示
	client := sendgrid.NewSendClient(API_KEY)
	response, err := client.Send(message)
	if err != nil {
		log.Println(err)
	} else {
		fmt.Println(response.StatusCode)
		fmt.Println(response.Body)
		fmt.Println(response.Headers)
	}
}

.env

API_KEY=xxxxxxxxxxxxxxxx
TOS=hoge_to@gmail.com
FROM=hoge_from@yahoo.co.jp

メール送信実行
go run src/main/main.go

Discussion