Azure Functions 및 Event Webhook에서 SendGrid의 메일 배달 상태 확인

Azure Functions의 SendGrid 바인딩에서 특히 라이브러리를 설치하지 않고 쉽게 이메일을 전달할 수 있습니다.

하지만 배달 요청이 제대로 전송되었다고 하더라도 나중에 어떻게 될지 걱정해야 합니다. 예를 들어,
  • SendGrid에서 대상 이메일로 배달 되었습니까?
  • 메일이 개봉되었는가
  • 그리고 개봉 된 메일에 기재되어있는 링크는 클릭 받았는지
  • 원래 메일은 중간 메일 서버에서 거부되지 않았습니까
  • 도착했지만 스팸으로 취급되지 않았습니까

  • 등과 같은 것을 신경 쓰지 않으면 안됩니다. SendGrid는 그것을 확인하기 위해 활동 기능을 제공합니다.
    이것은 매우 편리하지만 화면 응답이 느리고 여러 사람이이 화면을 보면 오류가 발생합니다.

    Event Webhook



    “이 정보를 자신의 시스템에 가지고 싶다!”라고 생각하는 사람을 위해서, SendGrid는 Event Webhook 를 제공하고 있습니다. 이것은 각 메일의 배송 상태를 지정한 Webhook의 엔드 포인트에 정보를 보내주는 기능입니다.



    Event Webhook

    이메일 배달 요청을 수락한 후 각 상태에 대해 고유한 정보를 JSON으로 등록한 Webhook의 끝점으로 보냅니다.

    Azure Functions로 Webhook 엔드포인트 구현



    Webhook은 Azure Functions의 Http 트리거의 차례입니다! 그렇다고 해서, 시험에 만들어 보았습니다.

    이 샘플은 메일이 예상대로 도착하지 않은 경우 HipChat에서 지정한 방에 알림을 제공하는 Function입니다.

    SendGridWebhook/index.js
    var Hipchatter = require('hipchatter');
    var hipchatter = new Hipchatter(process.env.HIPCHAT_ROOM_TOKEN)
    
    function notifyToRoom(event, context)
    {
        event.timestamp = new Date(event.timestamp * 1000);
        var options = {
            message: `/code ${JSON.stringify(event, null, '  ')}`,
            message_format: 'text'
        };
    
        switch (event.event) {
            case 'bounce':
            case 'deferred':
            case 'dropped':
            case 'spamreport':
            case 'unsubscribe':
                options.color = 'red';
                options.notify = true;
            break;
            case 'delivered':
            case 'open':
            case 'click':
                options.color = 'green';
            break;
            default:
                options.color = 'gray';
            break;
        }
    
        hipchatter.notify(process.env.HIPCHAT_ROOM_ID, options,
            function (err) {
                if (err)
                    context.log.error(err);
            }
        );
    }
    
    module.exports = function (context, req) {
        var events = req.body;
    
        if (!events) {
            context.log.error(`unexpected body: ${req.body}`);
            return;
        }
    
        events.forEach(function(event) {
            notifyToRoom(event, context);
            context.log(event);
        }, this);
    
        context.res = { status: 200, body: '' }
        context.done();
    };
    

    실제 알림은 이런 느낌입니다. 제대로 배송되었을 경우는 녹색으로, 뭔가 문제가 있었을 경우는 붉게 통지가 도착하게 되어 있습니다.



    이번은 배송 상황을 알고 싶었기 때문에 통지했습니다. 그 밖에도 응용으로서,
  • 메일 열기, 클릭을 포함하여 전환을 측정하고 싶습니다.
  • 메일을 배달할 수 없는 경우, 사용자의 정보에 플래그를 지정하고 싶다.

  • 라고 하는 것도 할 수 있을 것 같습니다.

    그럼 즐거운 메일 라이프를 < ⚡ >

    참고


  • Azure Function에서 SendGrid 바인딩을 사용하여 메일 보내기 - Qiita
  • 이벤트 웹후크 - SendGrid Documentation | SendGrid
  • 좋은 웹페이지 즐겨찾기