AWS SDK Golang×SESでのメール送信 using SendBulkTemplatedEmail

AWS SDK Golang×SESでのメール送信 using SendBulkTemplatedEmail:


はじめに

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

テンプレートの日本語記載がメールにおいて文字化けする、という問題が未解決なので、解決したら追記します。

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)