yotiky Tech Blog

とあるエンジニアの備忘録

Azure SendGrid を使ってメールを送信する

目次

アカウントの作成

無料枠を使いたい場合は、SendGridのサイトからアカウントを作成する必要がある。 2021年1月時点*1で、Azure Marketplace から作ろうとした場合に無料プランは選択できなくなっている。 どちらから作るかによって選べるプランが違うようなので、比較した上で目的にあったプランを選択する。

また、SendGrid は sendgrid.com を元にリセラーパートナーがあり、それぞれ別の契約になっている様子。 sendgrid.com、構造計画研究所(sendgrid.kke.co.jp)、Azure Marketplace などそれぞれ別のアカウント、契約&サポートになるようなので注意が必要。

support.sendgrid.kke.co.jp

Azure Marketplace で SendGrid のアカウント作成する場合、1つのサブスクリプションにつき1つしか作れない。*2


Azure のサービスから「SendGrid」で検索して、SendGrid Accounts を開いて「作成」からアカウントを作成する。

f:id:yotiky:20210313170101p:plain

Azure 上から作成する場合は、 Bronze が一番下のプラン。 f:id:yotiky:20210313170502p:plain

f:id:yotiky:20210313171136p:plain

こちらの記事を参考にすると、SendGrid の昔の料金体系のまま、上位のプランが増えた感じ。

blog.shibayan.jp

Azure を使わず sendgrid.com からアカウントを作成する場合はこちらも参考に。

yotiky.hatenablog.com

SendGrid のセットアップ

作成したリソースの概要から Manage を選択して、sendgrid.com のページを開く。

f:id:yotiky:20210313171654p:plain

Single Sender (差出人) の登録かドメインの認証が必要になる。

【重要】APIキー認証および二要素認証が必須に変更されます – サポート

今回は Single Sender を選択した。

f:id:yotiky:20210313171929p:plain

f:id:yotiky:20210313172341p:plain

作成したらメールが飛んでくるので verify する。

f:id:yotiky:20210313172644p:plain

Single Sender は、Settings > Sender Authentication で管理される。

f:id:yotiky:20210313172936p:plain

「Verify a Single Sender」で作成したり編集したりできる。

f:id:yotiky:20210313173058p:plain

f:id:yotiky:20210313173316p:plain

API Key の作成

Settings の API Keys からキーを作成することができる。

f:id:yotiky:20210313163025p:plain

f:id:yotiky:20210313173918p:plain

権限は必要に合わせて調整する。送信するには [Mail Send] が必要。

f:id:yotiky:20210313174039p:plain

作成するとキーが表示されるのでコピーしておく。

f:id:yotiky:20210313174128p:plain

実装

NuGet で Sendgrid をインストールする。

Single Sender 認証を行った場合、From のメールアドレスが認証に使用したメールアドレスと一致していないと Forbiddenステータスコードが返ってくるので注意。

シンプルなシナリオでは以下の通り。

var apiKey = "API KEY";
var client = new SendGridClient(apiKey);
var from = new EmailAddress("登録した送信者のメールアドレス@example.com", "fromの名前");
var subject = "SendGridを使ったメール送信";
var to = new EmailAddress("to@example.com", "toの名前");
var plainTextContent = "テキストの内容です。";
var htmlContent = "<strong>HTMLの内容です。</strong>";
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
Console.WriteLine(response.StatusCode.ToString());

複数の宛先に送信する場合は CreateSingleEmailToMultipleRecipients() を使用する。

var tos = new List<EmailAddress>
{
    new EmailAddress("to1@example.comt"),
    new EmailAddress("to2@example.com"),
};

var msg = MailHelper.CreateSingleEmailToMultipleRecipients(from, tos, subject, plainTextContent, htmlContent);

リポジトリには設定ファイルから読み込む、.NET Core のサンプル.NET Frameworkサンプルもあるので参考になる。

github.com

参考