しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SendGrid が大幅にアップデートされていたので簡単に調べた

昨日は SendGrid で大きなアップデートが発表されていたようです。

SendGrid の公式ブログでもアップデート内容について、英語ですが紹介されていました。

Pricing and Plans | SendGrid
Introducing the General Availability of SendGrid’s New Customer Portal - SendGrid

価格体系に関しては KKE の公式ブログに任せたいので、これまでベータ版として一部ユーザーに提供されてきた、新しいダッシュボードと関係する機能について注目しておきたいです。

新しいダッシュボードは SendGrid の iOS アプリケーション的なデザインになっています。

これまでのダッシュボードはちょっと古い感じでしたが、一気に新しい見た目になりました。機能も増えているので、見た目だけのアップデートではないことを強調しておきたいですね。

地味に Web API v3 では API の仕様がそれぞれで統一されて、それぞれの API 毎に微妙に仕様が異なるという問題が解消したのは嬉しいポイントです。

Authentication | Twilio

Rate Limits の追加や、HTTP ステータスコードでちゃんと成功したかどうか確認できるようになったようです。これまでは 200 返しておきながら、レスポンスの JSON ではエラーとかもあったので大変でした。

そして中でも一番に注目したいのは、ついに API Key が導入されたことでしょうか。

SendGrid の SMTP や Web API では、メインユーザーかサブユーザーの ID とパスワードが必須です。しかも Web API では直接クエリパラメータや POST 値、Base64 エンコードしてヘッダーで渡すといったように、最近の API とは思えないような仕様になっていました。

今回、ついに導入された API Key を使うと Web API v3 とメール送信に関わる部分で、パスワードを使わなくても利用できるようになります。

API Keys work for v3 API calls and for sending email. API endpoints prior to v3 do not support API keys at this time.

Manage SendGrid API Keys | Twilio

誤って流出してしまった時には該当する API Key を削除すればいいので、これからは管理が楽になりますね。

作成は管理用の名前だけを入力すれば作れるので、とても簡単です。

名前を入力して保存すると API Key が表示されます。注意点として API Key はこのタイミングでしか表示されないので、ちゃんとコピーしておかないと作成し直しになります。

今のところ API Key に権限を設定する機能は開発中らしいです。今のままだと大雑把すぎるので、アップデートされるのを期待しておきたいです。

実際に API Key を使って、SMTP と Web API の両方でメールの送信をするところまで試しました。

SMTP で API Key を使う

基本的に ASP.NET 使いなので、IIS ベースで紹介します。IIS Manager から SMTP 設定を開いて、いつも通りのエンドポイント設定を行っておきます。

ここまでは何も変わりませんが、資格情報の部分だけ変わります。当然ながら API Key にはユーザー名なんてありませんので、apikey という文字列を固定で設定しておきます。

パスワードには生成した API Key を設定しておきます。たったこれだけの変更で使えました。

Web.config に出力された情報を一応書き出しておきます。

<system.net>
  <mailSettings>
    <smtp from="from@example.com">
      <network defaultCredentials="false" host="smtp.sendgrid.net" password="{APIKEY}" port="587" userName="apikey" />
    </smtp>
  </mailSettings>
</system.net>

password の部分は API Key に置き換える必要がありますが、ほぼそのまま使えます。

Web API で API Key を使う

Web API を使ってメール送信を行っている人は少なそうですが、基本的には SMTP API より Web API の方が楽なので紹介しておきます。

実際には何らかのクライアントライブラリを使うと思いますが、とりあえず HttpClient を使ってメール送信を試してみました。API Key は Authorization ヘッダーに Bearer スキームと一緒に指定するだけです。

var client = new HttpClient();

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "{APIKEY}");

var content = new FormUrlEncodedContent(new Dictionary<string, string>
{
    { "to", "to@example.com" },
    { "from", "from@example.com" },
    { "subject", "テストメッセージ" },
    { "text", "これは Web API のテストメッセージです" }
});

client.PostAsync("https://api.sendgrid.com/api/mail.send.json", content);

この API Key の指定方法は Web API v3 でも同じみたいなので、そのまま使えそうです。

自作の SendGrid クライアントライブラリのアップデートを、久し振りに行おうかなと思いました。