はじめに
AWS SDK GolangとSESで、SESのテンプレートを使いつつ一括メール送信する設定をしたので記録として残しておきます。
Go×SESでメール送信
まずは以下の記事を参考に、プログラム上で設定したメッセージ文言でメール送信できることを確認しました。
この時点ではテンプレートは使用していません。
AWS SDKを使ってGolangからSES経由でメールを送る
メールテンプレート対応
SESテンプレートを登録し、メール送信時のSESのAPIとしてsendMailではなくSendBulkTemplatedEmailを呼び出すようにしていきます。
SESにテンプレート登録
SESテンプレートはAmazon SES API を使用してパーソナライズされた E メールを送信するの手順に従って登録しました。
上記手順に記載されているのと全く同じテンプレートを登録してみました。
SendTemplateEmailを使うようコードを編集
SES-APIのドキュメントを見つつ編集。
package main
import (
"errors"
"log"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ses"
)
func main() {
from := "from@example.jp"
template := "MyTemplate"
defaultTemplateData := "{ \"name\":\"\", \"favoriteanimal\":\"\" }"
// メール送信先
destinations := []*ses.BulkEmailDestination{
{
Destination: &ses.Destination{
ToAddresses: aws.StringSlice([]string{"to1@example.jp"}),
},
ReplacementTemplateData: aws.String("{ \"name\":\"太郎\", \"favoriteanimal\":\"ペンギン\" }"),
},
{
Destination: &ses.Destination{
ToAddresses: aws.StringSlice([]string{"to2@example.jp"}),
},
ReplacementTemplateData: aws.String("{ \"name\":\"次郎\", \"favoriteanimal\":\"あひる\" }"),
},
}
err := SendEmail(from, template, destinations, defaultTemplateData)
if err != nil {
log.Println("mail sending error")
}
log.Println("mail was sent!")
}
func SendEmail(from string, template string, destinations []*ses.BulkEmailDestination, defaultTemplateData string) error {
sess := session.Must(session.NewSession())
svc := ses.New(sess)
input := &ses.SendBulkTemplatedEmailInput{
DefaultTemplateData: aws.String(defaultTemplateData),
Destinations: destinations,
Source: aws.String(from),
Template: aws.String(template),
}
_, err := svc.SendBulkTemplatedEmail(input)
if err != nil {
return errors.New(err.Error())
}
return nil
}
これでテンプレートを使ってメール送信できました。
このコードでは送付先のアドレスやテンプレート内で動的に変える値を直接記述していますが、実際には”// メール送信先”とコメントを入れているあたりで、DBから取得した値をそれぞれに設定することになるイメージです。
However
テンプレートの日本語記載がメールにおいて文字化けする、という問題が未解決なので、解決したら追記します。