【GAS】 Gmail을 정기적으로 확인하고 새 메일을 Slack에 통지

10187 단어 슬랙gmailgas

소개



배경



평소 메일 매거진 등 메일이 많이 와서 스마트 폰의 알림이 시끄럽기 때문에 멈추고 싶습니다.
송신원마다 모두 멈추면 가끔 오는 중요 메일 등을 눈치채지 못한다
스마트 폰의 메일 취득 간격을 늘리면 즉시보고 싶은 메일이 오지 않습니다.
그래서 일단 아카이브하고 정기적으로 메일의 제목을 취득하고 slack에 통지하도록 했다

참고로 한 것



[결정판] GAS에서 Gmail 검색 결과를 스프레드 시트로 추출하는 방법
【초보자용】GAS를 사용해 Slack에 자동 통지

설계 개요



다음 동작을 수행
  • Gmail의 각 라벨에 대해 새로 받은 이메일을 확인합니다
  • 해당 이메일이 있으면 제목을 추출하고 레이블별로 슬랙에 알립니다.
  • 확인 간격은 12시간마다

  • 사전 준비



    Gmail 설정



    즉시 알림이 필요없는 이메일은 아래 필터를 설정합니다.
  • 받은 편지함 건너 뛰기 (아카이브)
  • 임의 라벨을 붙인다

  • 슬랙 설정



    왼쪽 열 아래쪽에 있는 Add Apps를 클릭합니다.
    "incoming-webhook"을 검색하여 설치



    incoming-webhook 설정 화면에서 Add Configuration을 클릭하십시오.



    게시할 채널을 선택하고 Add Incoming WebHooks integration을 클릭합니다.
    ※여기에서는 gmail 채널을 선택


    그러면 「Webhook URL」이 작성된다.
    나중에 사용하기 때문에 삼가 해주십시오.

    GAS 설정



    Google 드라이브에서 새로 만들기를 클릭하고 Google Apps Script를 선택합니다.
    아래의 스크립프를 복사합니다.
    ※일부 수정 개소 있어(2행째)

    mail.gs
    function sendToSlack(message) {
      var postUrl = '<Slack Webhook URL>'; // 先程取得した Slack の Webhook URLを指定する
      var username = 'GmailBot';      // 通知時に表示されるユーザー名
      var icon = ':hatching_chick:';  // 通知時に表示されるアイコン
    
      var jsonData =
      {
         "username" : username,
         "icon_emoji": icon,
         "text" : message
      };
      var payload = JSON.stringify(jsonData);
    
      var options =
      {
        "method" : "post",
        "contentType" : "application/json",
        "payload" : payload
      };
    
      UrlFetchApp.fetch(postUrl, options);
    }
    
    function main() {
      var messages = 'Gmail Check Start!\n';
      var after = parseInt(((new Date()).getTime() - 13 * 60 * 60 * 1000) / 1000);  //13時間前を指定
    
      var labels = GmailApp.getUserLabels();  //ラベル一覧を取得
      for (var i = 0; i < labels.length; i++) {
        var targetLabel = "label:" + labels[i].getName();
        var searchTarget = targetLabel + ' after:' + after
        var subjects = ''
    
        var loopcount = 0;
        GmailApp
        .search(searchTarget, 0, 10)
        .forEach(function (thread) {
          thread.getMessages().forEach(function (message) {
            var subject = message.getSubject();  //メールの件名を取得
            subjects += subject + "\n"
            loopcount++;
          });
        });
    
        if (loopcount === 0) continue;
        messages += "\n" + targetLabel + "\n" + subjects
      }
    
      sendToSlack(messages)
    }
    
    

    테스트 실행



    main 함수를 지정하고 실행 버튼▶을 클릭합니다.
    ※첫회만 권한 허가에 대해서, 동의가 요구되므로, 동의한다



    slack에 제대로 게시되면 성공!

    이런 느낌이 될 것


    정기 실행



    프로젝트 트리거를 클릭


    트리거 추가를 클릭하고 아래 이미지와 같이 설정


    마찬가지로 실행시간을 '오후 10시~11시'로 설정한 트리거 추가
    ※트리거는 이 범위에서 실행되므로 매회 변동한다
    ※그 때문에, gas 프로그램의 after를 13시간으로 하고 있다

    사이고에게



    여러 계정을 확인하는 방법을 살펴봤는데 잘 모르겠습니다.
    우선, 각 계정마다 같은 설정을 할 수밖에 없을 것 같다.
    누군가, 방법을 아시면 교시해 주세요.

    좋은 웹페이지 즐겨찾기