概要 †Azure Functions から SendGrid を使用してメール送信するサンプルを記載する。 目次 †
SendGird アカウントの登録 †登録方法による FREEプランの利用枠の違い †Azure Marketplace からと 日本公式サイトから登録できるが、登録方法によってFREEプランの利用枠が異なる。
※ https://sendgrid.kke.co.jp/blog/?p=2621 日単位と月単位で紛らわしいが、Marketplace から登録する方が2倍近くの量を送信できる。 Marketplace から SendGird アカウント登録 †Azure ポータルで検索バーから SendGrid Accounts を検索。 [追加] を押下。 アカウント情報を入力して登録。(とりあえずFREEプランで) Azure ポータルの SendGrid Accounts から Manage を押下。 確認メールを送るか聞かれるのでボタンを押下。 こんな感じのメールが届くのでボタンを押下。 利用準備 †SendGrid API キーの作成/確認 †Send Grid 側の管理画面から API Keys を押下。 Create API Key を押下。 APIキー名を入力して、[Create & View]を押下。 APIキーが画面に表示されるので、メモしておく。 goパッケージインストール †SendGrid公式の Go パッケージをインストールしておく。 go get github.com/sendgrid/sendgrid-go 実装 †基本的な実装は Azure Functions を Go で書く と変わらないので、以下メール送信部分のみ抜粋して記載する。 [補足] package main
import (
"fmt"
"log"
"os"
"strings"
"github.com/sendgrid/sendgrid-go"
"github.com/sendgrid/sendgrid-go/helpers/mail"
)
:
func sendmail(subject string, messages []string, result string) {
API_KEY := os.Getenv("SENDGRID_API_KEY")
senderName := os.Getenv("MAIL_FROM_NAME")
senderMail := os.Getenv("MAIL_FROM_ADDRESS")
recipients := strings.Split(os.Getenv("MAIL_TO_ADDRESSES"), ",")
messageText := ""
messageHtml := ""
for _, s := range messages {
messageText = fmt.Sprintf("%s%s\n", messageText, s)
messageHtml = fmt.Sprintf("%s%s<br />", messageText, s)
}
if result != "SUCCESS" {
messageHtml = fmt.Sprintf("<div style='color: #f00'>%s</div>", messageHtml)
}
from := mail.NewEmail(senderName, senderMail)
email := mail.NewV3Mail()
email.SetFrom(from)
email.Subject = subject
p := mail.NewPersonalization()
for _, s := range recipients {
fmt.Printf("name: %s\n", s)
to := mail.NewEmail(s, s)
p.AddTos(to)
}
email.AddPersonalizations(p)
textContent := mail.NewContent("text/plain", messageText)
htmlContent := mail.NewContent("text/html", messageHtml)
email.AddContent(textContent, htmlContent)
client := sendgrid.NewSendClient(API_KEY)
response, err := client.Send(email)
if err != nil {
log.Println(err)
} else if response.StatusCode == 202 {
log.Printf("info: Mail sended. Status=%d", response.StatusCode)
} else {
log.Printf("error: status %d", response.StatusCode)
log.Printf("error: header %v", response.Headers)
log.Printf("error: body %s", response.Body)
}
}
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
:
"SENDGRID_API_KEY": "上記で取得したSendGridのAPIキー",
"MAIL_FROM_NAME": "送信者名",
"MAIL_FROM_ADDRESS": "送信者のメールアドレス",
"MAIL_TO_ADDRESSES": "送信先アドレス1,送信先アドレス2,送信先アドレス3"
}
}
|