GAS에서 Gmail을 Discord로 전송할 수 있습니다.

소개



여러분, Gmail, 사용하시나요?
상당한 쪽이 사용하고 있다고 생각합니다만, 안에는 메일 체크를 거슬러 경향이 있어, 그만 중요한 연락을 간과해 버린다, 라고 하는 사람도 있다고 생각합니다. 나도 그 혼자입니다.
그렇다고 해서 그것을 해결하는 솔루션(말하고 싶었다)으로서, Gmail의 내용을 평상시 사용하고 있는 채팅 툴에 전송 할 수 있으면 체크 누출이 줄어들지 않을까,라고 GAS를 사용해 실제로 해보았습니다.
이번에는 그 지식을 정리해 가고 싶습니다.

Discord 웹훅 얻기



우선, 이번에는 Discord를 사용하고 싶기 때문에, 메일을 전송하기 위한 Discord 서버를 빨리 만듭니다.
그런 다음 메일을 받을 수 있는 채널을 준비하고 아래의 설정 마크 버튼에서 설정 화면으로 들어갑니다.



Webhooks라는 항목이 있으므로 거기를 클릭하십시오.



Webhook 만들기를 클릭합니다.
나는 이미 Gmail이라는 이름으로 만들었기 때문에 한 개 표시되고 있네요.



나오는 화면에서 임의의 이름을 붙이면, Webhook의 URL이 발행되므로 보관해 둡니다. 나중에 사용합니다.

또, 이 URL에 액세스하면 Token이 손에 들기 때문에 브라우저로 액세스 해 취득해 둡니다.

GAS 쓰기



만약을 위해 설명해 두면, GAS는 Google Apps Script의 약자로 JavaScript와 비슷한 언어를 사용하여 Google의 서비스와 연계하거나 한 도구를 만들 수 있습니다.
Google의 서비스와 연동하므로 당연히 Gmail도 호출할 수 있습니다.
이것은 스프레드시트에서 수정할 수 있습니다.
여기 도구라는 버튼을 눌러 스크립트 편집기를 선택하면 스크립트 편집 화면으로 이동합니다.





기본은 임의의 함수를 두고, 지정된 트리거로 그 함수를 기동시킨다고 하는 느낌입니다.
그럼 실제로 코드를 써 갑니다.

먼저 Discord Webhook에 메시지를 POST하는 함수를 만듭니다.

function discord(postMsg){
  const webhooks = '取得したURL'
  const token = '取得したToken';
  const channel = 'Discordで投稿するチャンネル名';
  const userName = 'Discordで表示する名前';
  const parse = 'full';
  const methods = 'post';

  const payload = {
    'token': token,
    'channel': '#mails',
    'content' : postMsg,
    'parse': parse,
  };

  const params = {
    'method': methods,
    'payload' : payload,
    'muteHttpExceptions': true,
  };
  response = UrlFetchApp.fetch(webhooks, params);
}

그런 다음 Gmail의 정보를 일정 간격으로 검색하여 내용을 Discord 함수에 전달하여 실행하는 함수를 만듭니다.

function mails(){
  var searchQuery = "Gmailで取得したい検索クエリ(例:to([email protected]))";
  var dt = new Date();

  //メールをチェックする頻度を指定します。短すぎるとGmailの制限に引っかかります。
  const checkSpanMinute = 30;
  dt.setMinutes(dt.getMinutes() - checkSpanMinute);

  var threads = GmailApp.search(searchQuery);

  var msgs = GmailApp.getMessagesForThreads(threads);
  for(var i = 0; i < msgs.length; i++) {
    var lastMsgDt = threads[i].getLastMessageDate();

    if(lastMsgDt.getTime() < dt.getTime()) {
      break;
    }

    for(var j = 0; j < msgs[i].length; j++) {
      var msgDate = msgs[i][j].getDate();
      var msgBody = msgs[i][j].getPlainBody();
      var msgFrom = msgs[i][j].getFrom();
      var matches = msgFrom.match(/"(.+)".*<(.+)>/)
      {
        var subject = msgs[i][j].getSubject();
       //取得したデータを最終的に受け取りたいフォーマットに整えます。Discordでは[```]を引用符として使えるので前後に着けています。
        var postMsg = "```" + "\n" +
          Utilities.formatDate(msgDate, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss') + "\n" +
              "件名:" + subject + "\n" +
              "[hr]" +
               msgBody + 
            "```";

        discord(postMsg);

      }
    }
  }
}


이런 느낌의 스크립트를 써 줍니다.

완료되면 일단 실행 -> 함수를 지정하여 실행, 에서 mails 함수를 실행하여 문제가 있는지 확인합시다.

트리거 설정



편집 -> 현재 프로젝트의 트리거에서 트리거 설정 화면에 넣습니다.
트리거를 추가에서 시간 중심으로 checkSpanMinute 에서 설정한 범위에서 mails 함수를 실행하도록 설정합니다.

이제 나중에 Google 서버에서 스크립트를 자동으로 실행할 수 있습니다.

요약



이제 자주 사용하는 도구로 Gmail을 얻을 수 있습니다.
실제로 운용하고 나서 상당히 메일의 확인 누출이 줄었습니다.
무엇보다, 메일의 연락과 평상시의 연락을 같은 툴로 관리할 수 있다고 하는 것이 QOL 높아서 좋은 느낌입니다.
여러분도 GAS를 사용하여 몸의 주위를 조금 편리하게 해 보는 것은 어떻습니까?

좋은 웹페이지 즐겨찾기