Google Apps Script で SES の Bounce を Spreadsheet に書き出す

  1. SES の Bounce SNS 通知の設定を設定し、転送先の Gmail アドレスを設定する。
  2. Spreadsheet のスクリプトエディタで以下のスクリプトを作成する。
  3. トリガーに設定しておけば定期的に Gmail をチェックして Spreadsheet に書き出される。
function bounce() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("bounce");

  var threads = GmailApp.getInboxThreads(0,1);
  for (var threadIndex in threads){
      Utilities.sleep(1000);
      var thread = threads[threadIndex];
      var messages = thread.getMessages();
      for (var messageIndex in messages){
          var message = messages[messageIndex];
          var body = message.getPlainBody();
          var start = body.indexOf("{");
          var end = body.lastIndexOf("}");
          var json = body.slice(start, end + 1);
          var result;
          try {
              result = JSON.parse(json);
          } catch(e) {
          }
          if(result) {
              var email = result['bounce']['bouncedRecipients'][0]['emailAddress'];
              var bounceType  = result['bounce']['bounceType'];
              var bounceSubType  = result['bounce']['bounceSubType'];
              var date  = result['bounce']['timestamp'];
              var feedbackId  = result['bounce']['feedbackId'];
              var diagnosticCode  = result['bounce']['bouncedRecipients'][0]['diagnosticCode'];

              var data = sheet.getDataRange().getValues();
              var already = false;
              for (var i = 0; i < data.length; i++) {
                  if (data[i][0] === feedbackId) {
                      already = true;
                  }
              }
            if(!already) {
                sheet.appendRow([feedbackId, email, bounceType, date, diagnosticCode]);
            }

          }
      }
    thread.moveToArchive()
  }
}