Help us understand the problem. What is going on with this article?

Azure Function Appから定期的にメールを送る

More than 3 years have passed since last update.

概要

気が向いた && 自分が追加したテンプレートが無事masterにマージされたので、そのテンプレートについて書きます。タイトルの通り、Azure Functionsを使って定期的にメールを送る方法です。C#オンリーです。悪しからず。

Azure Advent Calendar 2の15日目です。

背景

Azure Function Appには既存のテンプレートが沢山あり、自分でフルスクラッチで書かなくても、どれかテンプレートを選択すれば必要なファイルが自動的に作成されます。自分は定期的にメールを送るFunction Appを作りたかったのですが、ちょうどいいテンプレートがありませんでした。「タイマー起動するテンプレート」と「Storageにエントリが追加されたらメールを送るテンプレート」があるのに、もっと実用的な「タイマーでメール送信するテンプレート」がないのはどういうわけでしょう。ということでそのためのテンプレートを作ってプルリクしたらマージされました。

準備1: SendGridのアカウントを作る

SendGridを使いますので、SendGridのアカウント登録が必要です。Azureのサブスクリプションからならば一日当たり25,000通まで無料なので、個人用であれば十分無料の範囲で使えます。

ポータルから「More services」→「Send」とタイプ→「SendGrid Accounts」をクリックします。

1.PNG

「Add」をクリックして新規作成ブレードに行き、項目をすべて埋めます。Pricing tierはF1を選び、Selectをクリックします。

2.PNG

Contact Informationを開いて項目を埋め、最後にLegal termsを開いてPurchaseをクリックしてください。Purchaseといっても無料プランなのでお金はかかりません。あとはCreateをクリックして少し待てばSendGridのアカウントが作成されます(スクリーンショットには例として2つのアカウントが表示されてます)。

3-2.PNG

準備2: SendGridのAPIキーを得る

今作成されたSendGridアカウントをクリックしてから「Manage」をクリックし、SendGridのダッシュボードを開きます。

4.PNG

ダッシュボード左下の「Settings」をクリックして「API Keys」をクリックします。
5.PNG

右上にある青いボタン「Create API Key」を押し、"Generate API Key"をクリックします。"Add New General API Key"というウィンドウが開くので、名前とアクセス権を設定してからSaveを押せば新しいキーが作成されます。とりあえずMail Send, Alerts, Email Activity, Statsあたりのアクセス権を取得しておけばいいと思います。

6.PNG

無事にキーが作成されると秘密鍵が表示されます。一度この画面を抜けると二度と表示されないので、コピーしてメモ帳などに保存しておいてください。これを後で使います。

7.PNG

これでSendGridの準備はおしまいです。ダッシュボードを閉じてOKです。

Function Appを作る

Azureポータルのトップから「+」マークを選び、funcとタイプすると「Function App」が表示されるのでクリックします。
8.PNG

Function Appを選択してCreateをクリックし、普段App Serviceを作るのと同様に名前を付けて作成してください。
9.PNG

しばらく待つとFunction Appが作成されます。「デプロイされたよ」という通知をクリックするとFunction Appへのリンクがありますのでクリックしましょう。
10.PNG

Functionを作る

前項で作ったFunction Appは、いわば各種Functionを登録するためのコンテナのようなものだと考えてください。なので、次はその中にFunctionを追加していきます。"New Function"をクリックするとテンプレート一覧が表示されます。

ここでLanguageをC#、ScenarioをSamplesまたはAllとすると、ScheduledMail-CSharpが見つかると思います(アルファベット順なので少しスクロールしないと出てこないと思います)。これを選択してください。
11.PNG

テンプレートを選択すると、その下にテンプレート固有のパラメータ入力エリアが表示されます。SendGrid API Keyは変更せずに、それ以外のフィールド(名前、cron、To address、From address)を設定してください。
12.PNG

デフォルトではUTCで23:00:00に起動するようになっていますので、まあお好みで変えてください。あとはCreateボタンを押せばFunctionが作成されます。

APIキーを設定する

次にSendGridのAPIキーを設定しましょう。左下の"Function app settings"をクリックしてから"Configure app settings"を押してください。
13.PNG

App Serviceの設定画面が開きますので、SendGridApiKeyという名前で、APIキーの設定を追加します。最後にSaveを押すのを忘れずに!
14.PNG

さっそくテストしてみましょう。Functionに戻ってDevelopを選択してください。画面中央上に大きく「Run」ボタンがあるので押してみましょう。ログに"Function completed"と表示されたら、しばらく待てばメールが送られるはずです。エラーが出た場合はSendGridApiKeyが正しく設定されているか、メールアドレスが正しいかあたりを確認してみてください。
15.PNG

あとはお好みで

メール送信ができるようになりましたので、あとはRun()の中に好きにビジネスロジックを書きましょう。ToはRun()内で設定可能なので、宛先を都度指定することもできます。このあたりはSendGridのドキュメントをご参照ください。固定値でよいならば「Integrate」からSendGridを選択することでいつでも変更できます。

16.PNG

最後に

Azure Functionsは自分のいるApp Serviceで作ってますが、基本オープンソースなのでfeature requestはプルリクで行いました。皆さんも何か作ったらぜひどうぞ!ではでは。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした