Go言語、SendGridでメール送信機能

はじめに

SendGridはメール送信に特化したサービスです。
今までの現場でも使われているようでしたが触ったことはなかったので、
配信関係の流れで試してみました。
ユーザ登録してAPI呼ぶだけで使えるのがお手軽ですね。
SDKも豊富そうなので、困らなそう。
後、ドキュメントの説明が丁寧な印象です。

コード

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "os"

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

func main() {
    // クライアント作成
    client := sendgrid.NewSendClient(os.Getenv("SENDGRID_API_KEY"))

    // メッセージ作成
    from := mail.NewEmail("Example User", "test@example.com")
    subject := "お知らせサンプル Sendgrid"
    to := mail.NewEmail("Example User", os.Getenv("EMAIL")) // 環境変数より取得
    plainTextContent := "テキストメッセージの送信"
    htmlContent := "<strong>HTMLメッセージの送信</strong>"
    message := mail.NewSingleEmail(from, subject, to, plainTextContent, htmlContent)

    // メール送信
    response, err := client.Send(message)
    if err != nil {
        log.Println(err)
    } else {
        fmt.Println(response.StatusCode)
        fmt.Println(response.Body)
        fmt.Println(response.Headers)
    }
}

レスポンス

202

map[Access-Control-Allow-Headers:[Authorization, Content-Type, On-behalf-of, x-sg-elas-acl] Access-Control-Allow-Methods:[POST] Access-Control-Allow-Origin:[https://sendgrid.api-docs.io] Access-Control-Max-Age:[600] Connection:[keep-alive] Content-Length:[0] Date:[Wed, 29 Sep 2021 05:09:54 GMT] Server:[nginx] Strict-Transport-Security:[max-age=600; includeSubDomains] X-Message-Id:[CnapdViTR0KjGH2JUc6wYA] X-No-Cors-Reason:[https://sendgrid.com/docs/Classroom/Basics/API/cors.html]]

おわりに

Twilioを使ったSMS配信もあり、一緒に乗せたかったのですが、検証間に合わずでした。
Go用のSDKはなさそうなのでAPI呼び出しでの実装になりそうです。
というかTwilioがSendGridの親会社だったんですね。