つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

キューをトリガーにしてSendGridでメールを送るAzure Functionsを作ってみた

SendGridを使って定形メールを送る場合、もうこの方法でいいんじゃないかと思ってきました。
メールサーバは自前で構築すべきでないし、現状はSendGridを使うことがベターだと思います。

とはいえSDKを使ってメール送信機能を自分で作るのすら面倒に感じていたので、Azure FunctionsのSendGridバインドを試してみました。

結論

いきなりコードを書くな。FunctionsポータルのGUIで作った関数をコード化しろ。

いきなりコードを書くな

このドキュメントにあるサンプルに従って、SendGridのメールを送る関数を作ってみたがうまく動かず。

docs.microsoft.com

Visual Studio 2015 + Tools for Azure Functionsで作ってたが、どうにもデバッグが面倒くさい。

Functionsポータルで関数を作る

このドキュメントに従ってポチポチとポータルで関数を作ります。すごく簡単。

docs.microsoft.com

いきなりQueueをトリガー(入力)にせず、ManualTriggerで「SendGridバインドでメールが送信できる」ことを確認すると分かりやすいです。
その後、トリガーをQueueに変更しましょう。

ストレージアカウントの接続情報やSendGridのAPIキーを直接コード上に定義するとコミット上から丸見えになってしまうので、App Serviceのアプリケーション設定に定義して、function.jsonから参照することで安全に管理できます。

f:id:tech-tsubaki:20170815003121j:plain

f:id:tech-tsubaki:20170815003419j:plain

SendGridのバインド設定はAPIキーのほか、以下の情報を設定にもつことができます。

  • APIキー
  • 宛先アドレス(to)
  • 差出人アドレス(from)
  • 件名(subject)
  • 本文(body)

コード化する

「Queueをトリガーにする」「SendGridでメールを送信する」という動作が確認できたら、それをコード化しましょう。
といってもFunctionsポータルで参照できる function.jsonrun.csx をコピペすれば良いです。
試しに作ってみたので気になる方は見てみてください。

github.com

このサンプルではQueueに送信先メールアドレスを入力することで、自動的にそのメールアドレスに対してSendGridからメールを送信する関数になってます。