Azure Functions App 및 SendGrid로 간편하게 이메일을 보내는 방법

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

Azure의 Functions App에서 메일 알림 알림을 만드는 방법을 알아봅니다.

실제로 시도한 것은 상당히 전입니다만, 의외 정보가 적기 때문에 모처럼이므로 정리해 둡니다.

사전 준비



다음 준비가 되어야 합니다.

1. Azure에 등록되어 있으며 Azure Functions App을 사용하는 방법을 알 수 있습니다.

2. 분위기에서 C#을 알 수 있다

3. SendGrid API 키 생성

API Key에 대해서는 다음을 참조하십시오.

하는 것



간단하게 Microsoft의 Azure의 Functions App에서 이메일을 보냅니다.

간단한 흐름은 아래.



이번에는 테스트를 사용하여 SendGrid에서 이메일을 보냅니다.

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("[email protected]", "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("[email protected]", "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]", "");
    

    이상을 잘 느낌으로 커스터마이징합시다.

    Functions App 테스트



    그럼 실제로 테스트 해 봅시다.

    테스트 부분에서는 실제로 이 Functions App이 킥될 때 받는 JSON을 이용할 수 있습니다.



    이번 이용한 테스트 데이터의 내용은 이하입니다.
    {
      "payload_raw": "VGhpcyBpcyBiYXNlNjQgZW5jb2RlZCBkYXRhIQ=="
    }
    

    base64로 도착하는 경우가 많다고 생각하므로 base64로 변환하고 있습니다. 내용은 「This is base64 encoded data!」입니다.

    본래 건네받는 데이터는 서비스 제공원이 형식등을 공개하고 있으므로, 거기에 맞추어 잘 퍼스 해 올릴 필요가 있다고 생각합니다.

    메일 도달 확인



    지정한 이메일 주소로 수신을 확인해 봅시다.



    이제 쉽게 이메일을 보낼 수 있습니다. 간단한 통지 확인 등에 사용하면 편리할지도 (IoT 용도라든지).

    좋은 웹페이지 즐겨찾기