3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GAS】Gmailの内容を定期的にスプレッドシートに出力したよ

Posted at

Gmailでメールを受信したらスプレッドシートに項目を出力したいという業務依頼があり、実装しましたのでやったことを書いています。

Gmailで受信したメールをGASで取得ってできる?

できます。

GmailAppというライブラリでGmailから検索をします。
https://developers.google.com/apps-script/reference/gmail/gmail-app?hl=ja

下記は過去30分以内のメールを最大30件取得する例です。

// Gmailから特定条件のスレッドを検索しメールを取り出す
const unixTime = (new Date()).getTime();//UNIX TIMEに変換
const now = Math.floor(unixTime/1000); //ミリ秒を秒に変換
const term = now - 1800; //現在時刻から30分(1800秒)前
const termStr = term.toString(); //検索期間を文字列に変換

const strTerms = 'after:'+ termStr
var threads = GmailApp.search(strTerms, 0, 30);

下記はメールのタイトルと本文を取得してスプレッドシートに出力する例です。

for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var subject = message.getSubject();
      var date = message.getDate();
      
      // スプレッドシートにデータを書き込む
      sheet.appendRow([subject, date]);
    }
  }

GASで取得できるデータ項目

GASを使用してGmailから取得できるデータは以下の通りです:

メールの情報:

  • 件名 (Subject)
  • 送信者 (From)
  • 受信者 (To)
  • CC
  • BCC
  • 受信日時 (Date)
  • メールのID (ID)
  • スレッドID (Thread ID)
  • メールのサイズ (Size)
  • ラベル (Labels)
  • 重要度 (Importance)
  • 未読/既読状態 (Read/Unread)

本文の形式:

  • プレーンテキスト本文 (Plain Text Body)
  • HTML形式の本文 (HTML Body)

添付ファイル:

  • 添付ファイルのファイル名 (Attachment File Name)
  • 添付ファイルのコンテンツタイプ (Attachment Content Type)
  • 添付ファイルのサイズ (Attachment Size)

スレッド情報:

  • スレッド内のメールの数 (Number of Messages in Thread)
  • スレッドのID (Thread ID)
  • スレッドの件名 (Thread Subject)
  • スレッドの初めのメッセージ (First Message in Thread)
  • スレッドの最新のメッセージ (Last Message in Thread)
  • スレッドの未読/既読状態 (Thread Read/Unread)

gasでGmailから取得できるデータは何があるかChatGPTさんに聞いた回答です。

メールの受信時にGASの処理をトリガーすることはできる?

調べたところそのような方法は見つかりませんでした。

私がやった方法としては、30分おきにメールBOXを検索するバッチ処理を発火させるやり方です。

Apps Scriptの[トリガー]から設定が可能です。

スクリーンショット 2023-07-12 21.59.19.png

今回は30分おきでも問題ありませんでしたが、最短で1分間隔の設定ができるのでほぼほぼリアルタイムでメールの内容がスプレッドシートに反映可能だと思います。

以上です。

ちなみに、「Gmailでメールを受信したことをトリガーにGASの関数を実行させることはできますでしょうか。」とChatGPTに質問したところ回答をもらえたのですが、、これは本当なのでしょうか?

はい、Gmailでメールを受信した際にGASの関数を自動的に実行させることは可能です。これを実現するためには、GASのトリガーを設定する必要があります。

以下に、Gmailでメールを受信したときにGASの関数を実行する方法を説明します。

GASのプロジェクトを開きます。

メニューから「トリガー」を選択します。

画面右下の「+新しいトリガーを追加」をクリックします。

「トリガーを設定する関数を選択」のドロップダウンメニューから、実行したい関数を選択します。例えば、前回説明したprocessNewEmails関数を選択します。

「イベントのソースを選択」のドロップダウンメニューから、「Google Apps のトリガー」→「Gmail」を選択します。

「イベントの種類を選択」のドロップダウンメニューから、「受信時」を選択します。

トリガーの詳細を適切に設定し、保存します。

これにより、Gmailでメールが受信された際に指定した関数が自動的に実行されます。

ただし、この機能を有効にするためには、Gmail APIを有効にする必要があります。GASエディタで「リソース」→「高度なGoogleサービス」を選択し、Gmail APIを有効にしてください。

この方法で、Gmailの受信をトリガーにしてGASの関数を実行することができます。
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?