yotiky Tech Blog

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

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

目次

アカウントの作成

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

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

support.sendgrid.kke.co.jp

sendgrid.com での作成手順はこちらで詳しく書かれている。

www.tama-negi.com

SendGrid のセットアップ

アカウント作成後は、二段階認証と Single Sender (差出人) の登録かドメインの認証が必要になる。

二段階認証を組織などで1アカウントを複数名で利用する場合は以下の方法が提示されている。

  1. Teammatesを利用する
  2. Authyの「Multi-Device」機能を利用する

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


今回は Single Sender を選択した。

f:id:yotiky:20210313171910p: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 の作成

Email API の Integration Guide から Web API を選択。

f:id:yotiky:20210313162628p:plain

続いて言語に C# を選択する。

f:id:yotiky:20210313162755p:plain

Key の名前を入力したら「Create Key」を押すとキーが表示される。 後半にはサンプルコードが提示されているので参考にする。

f:id:yotiky:20210313162833p:plain

作成した API Key は Settings の API Keys で名前や権限の変更、削除などが行える。

f:id:yotiky:20210313163025p:plain

また、ここから Key を作成することもできる。

f:id:yotiky:20210313163145p: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

参考