✉️

GASでGmailの新着メールをNotionのボードで管理する

2022/12/14に公開約3,500字

こんにちは、今回はGAS(Google App Script)を利用してGmailに来たメールを自動でNotionのデータベースに移動、コピーさせる方法について書いていきます。

社内のメール対応を分かりやすくするのに便利だと思いますので、よければやってみてください。

ちなみに私は最初Zapierでやってましたが、毎月数万円掛かりそうだったのでコード書きました。
コード書けると金を無駄にしなくて良いのは良いですね。。。!

完成形の見た目はこんな感じです。
来てから6時間以内のメールには「NEW」が付くようになっています。

Notionの設定

NotionのAPIを利用するにはIntegration(インテグレーション)の設定が必要となります。

Integration作成

NotionのIntegration管理ページから適当に名前など入力して作成してください。
Submitしたら出てくるtokenはメモしておきましょう。

tokenはこんなやつです。

secret_abcdefghijklfm12345678

https://www.notion.so/my-integrations

データベースを作成する

/boardと入力し、ボードビューの新規データベースを作成します。

「プロパティを追加する」から「作成日時」を追加します。

そして次に「プロパティを追加する」から「関数」を追加し、以下の数式を設定します。

if(dateBetween(now(), prop("作成日時"), "hours") < 6, "NEW", "")

データベースにIntegrationを追加する

右上の「・・・」からコネクトの追加、作成したIntegrationを追加しましょう

データベースIDを取得する

これまたデータベースIDが取得しにくいのでウェブアプリ作成しておきました。

まずはデータベースのURLを取得します。
データベースのURLを取得するにはデータベースの「・・・」を押して「ューのリンクをコピー」クリックするとコピーできます。

そしたらコピーしたURLを以下のウェブサイトで入力するとデータベースIDを取得できます。
tokenと一緒にメモしておきましょう。
https://deep.go5.run/app/notion/database-id

GASでコードを書く

今回は以下の内容を5分毎に実行するようにします。
「メールが来たとき」というトリガーは無いので数分毎に直近のメールを取得し、starやarchiveで処理済みと未処理を判定する必要があります。

function getMail() {
  const query = "to:support@kan.run"
  const Threads = GmailApp.search(query, 0, 15);
  const MessagesForThreads = GmailApp.getMessagesForThreads(Threads);

  for (const Thread of MessagesForThreads) {
    for (const Message of Thread) {
      if(!Message.isStarred()) {
        const strDate = Utilities.formatDate(
          Message.getDate(),
          "JST",
          "yyyy/MM/dd HH:mm:ss"
        );
        const Subject = Message.getSubject();
        const PlainBody = Message.getPlainBody();
      
        console.log("受信日時:" + strDate);
        console.log("メール件名:" + Subject);
        console.log("メール本文:" + PlainBody);
        console.log("==================");
        sendToNotion(Subject);
        Message.star();
    }
    }
  }
};

const sendToNotion = (subject) => {
  var url = "https://api.notion.com/v1/pages/";

  var notion_token = "ここにtoken";
  var database_id = "ここにデータベースID";
  var headers = {
    "Content-Type": "application/json; charset=UTF-8",
    Authorization: "Bearer " + notion_token,
    "Notion-Version": "2022-06-28",
  };

  var post_data = {
    parent: { database_id: database_id },
    properties: {
      Name: {
        title: [
          {
            text: {
              content: subject,
            },
          },
        ],
      },
    },
  };

  var options = {
    method: "post",
    headers: headers,
    payload: JSON.stringify(post_data),
  };

  return UrlFetchApp.fetch(url, options);
};

おわり

最後まで読んでいただきありがとうございました!

株式会社stakはAIのほかに体をトラッキングするデバイス「mocopi」の購入を予定していたり、オフィスにstarlinkが置いてあったりする企業です。

一緒に最先端技術を触って楽しめる人が増えて欲しいので株式会社stakに来てください!

▼ Wantedly
https://www.wantedly.com/companies/company_5362082

Discussion

ログインするとコメントできます