4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Functions AppとSendGridで簡単にメールを送る方法

Last updated at Posted at 2019-09-01

How to send "email" via Azure Functions App using SendGrid?

AzureのFunctions Appでメールのアラート通知を作成する方法について紹介します。

実際に試したのは結構前なのですが、案外情報が少ないのでせっかくなのでまとめておきます。

事前準備

以下の準備が整っているものとします。

1. Azureに登録しており、Azure Functions Appの使い方がわかる

2. 雰囲気でC#がわかる

3. SendGrid API keyを作成済み

API Keyについては以下を参考にしてください

すること

シンプルに、MicrosoftのAzureのFunctions Appからメールを送ります。

簡単なフローは以下。

image.png

今回はテストを利用してSendGridからEmailを送ってみます

Functions Appのプログラム

本体のプログラム(C#)は以下。いろいろ参考にしながら書きました。

プログラム自体は以下のGistにおいておきましたので必要に応じて参照してください。

run.csx

#r "Newtonsoft.Json"
#r "System.Configuration"
#r "System.Data"
#r "SendGrid"

//email
using Microsoft.Extensions.Logging;
using SendGrid;
using SendGrid.Helpers.Mail;

//encoding
using System.Text;

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task<IActionResult> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    //receive paramters (sample), custom yourself
    //string dev_id = req.Query["dev_id"];//Recive JSON Data's Tag
    string payload_raw = req.Query["payload_raw"];//Recive JSON Data's Tag

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);

    //parse query
    payload_raw = payload_raw ?? data?.payload_raw;

    //converted from paylad as base64
    byte[] payload_byte_data = Convert.FromBase64String(payload_raw);
    string payload_decoded_data = Encoding.UTF8.GetString(payload_byte_data);

    string Msg_mail = "This is test notification of sample send grid";
    Msg_mail += "<br>" +  payload_decoded_data;

    //you can check the data before sending e-mail here as a Log output
    log.LogError(Msg_mail);

    /** ----- create and send Email ----- **/
    
    //add below
    var client = new SendGridClient("Custom SendGrid key App Setting Name");
    var msg = new SendGridMessage()
    {
        From = new EmailAddress("no-reply@example.com", "Simple SendGrid HttpTrigger"),
        Subject = "Simple SendGrid HttpTrigger (Alert Test)",
        PlainTextContent = " This is Simple SendGrid Sender with HttpTrigger",
        HtmlContent = Msg_mail + "<br><br><br> This is test notification. <br> Send from Microsoft Azure Function App via SendGrid. <br> Tokina(@_tokina23)"
    };

    var recepients = new List<EmailAddress>
    {
        new EmailAddress("Your Mail Address", "Your Name")
    };

    msg.AddTos(recepients);
    msg.SetFooterSetting(true, " [Simple SendGrid HttpTrigger Test]", "");

    var response = await client.SendEmailAsync(msg);//Send Msg Here!

    /** ----- ====================== ----- **/
    
    //response
    return payload_raw != null
        ? (ActionResult)new OkObjectResult($"Received from, {Msg_mail}")
        : new BadRequestObjectResult("Please pass a name on the query string or in the request body");

}

以下簡単に説明します

  • Functions Appキック時に渡されるデータ
string payload_raw = req.Query["payload_raw"];//Recive JSON Data's Tag

渡されるデータのJSONタグを受け取ります。今回はテストで"payload_raw"というタグでBase64でエンコードされたデータが受け取られる想定をしています

  • SendGrid Key
var client = new SendGridClient("Custom SendGrid key App Setting Name");

ここにSendGridのキーを入れます

  • メール内容など
    var msg = new SendGridMessage()
    {
        From = new EmailAddress("no-reply@example.com", "Simple SendGrid HttpTrigger"),
        Subject = "Simple SendGrid HttpTrigger (Alert Test)",
        PlainTextContent = " This is Simple SendGrid Sender with HttpTrigger",
        HtmlContent = Msg_mail + "<br><br><br> This is test notification. <br> Send from Microsoft Azure Function App via SendGrid. <br> Tokina(@_tokina23)"
    };

メールの送信元や件名、本文などを指定します。また、HTML形式での記入も可能です。

  • 送信先メールアドレス
    var recepients = new List<EmailAddress>
    {
        new EmailAddress("Your Mail Address", "Your Name")
    };

リスト型で定義しているので、複数の送信先のメールアドレスを指定することができます。

  • メールのフッター
msg.SetFooterSetting(true, " [Simple SendGrid HttpTrigger Test]", "");

以上をうまい感じにカスタマイズしましょう。

Funcstions Appのテスト

では実際にテストしてみましょう。

テスト部分では、実際にこのFunctions Appがキックされたときに受け取るJSONを利用することができます。

image.png

今回利用したテストデータの中身は以下です。

{
  "payload_raw": "VGhpcyBpcyBiYXNlNjQgZW5jb2RlZCBkYXRhIQ=="
}

base64で届くことが多いと思うのでbase64で変換しています。中身は「This is base64 encoded data!」です。

本来渡されるデータはサービス提供元が形式などを公開しているので、それに合わせて上手くパースして上げる必要があると思います。

メール到達確認

指定したメールアドレスで受信を確認してみましょう。

image.png

これで簡単にメールを送れるようになりました。簡単な通知確認などに使うと便利かも(IoT用途とか)。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?