earthpg:GAS専門のプログラミングスクール

GASでメール内容を簡単取得!初心者向けステップバイステップガイド

最近、GASを使ってメール内容を取得したいと思っていて……でも、どうやったらいいのか全然わからないんです。もっと詳しく知りたいです。
猫男
猫男
catman
catman
そうか、それならcatmanがGASでメール内容を取得する方法を教えてやるさ。まずは基本から理解していこう。

GASでメール内容を取得する方法

以下のスクリプトで、Gmailから特定の件名を持つメールを取得して、その内容をログに表示できる。


function getEmails() {
  const threads = GmailApp.search('subject:重要');
  const messages = GmailApp.getMessagesForThreads(threads);
  
  for (let i = 0; i < messages.length; i++) {
    for (let j = 0; j < messages[i].length; j++) {
      Logger.log(messages[i][j].getSubject());
      Logger.log(messages[i][j].getBody());
    }
  }
}

GmailApp.search()で条件にあったスレッドを取得し、

続いてGmailApp.getMessagesForThreads()で各スレッド内のメッセージを取得する。

getSubject()getBody()で件名と本文をログ表示する。

messages は 2次元配列になる点に注意な。

スレッド単位(i)→ メッセージ単位(j)

の2重ループで処理せねばならんのだ。

おお!こうやってメールの件名と本文を簡単に取得できるんですね!
猫男
猫男

 

練習問題

以下の条件に基づいて、メッセージの送信者のアドレスを取得して、ログに表示するスクリプトを作成せよ。

  1. 「catman」という単語が件名に含まれているメールを対象とする。
  2. スレッドごとにメッセージを確認し、送信者のアドレスを取得する。
  3. ログに送信者アドレスと件名を表示する。

 

 

 

練習問題の解答・解説


function getEmailSenders() {
  const threads = GmailApp.search('subject:catman');
  const messages = GmailApp.getMessagesForThreads(threads);
  
  for (let i = 0; i < messages.length; i++) {
    for (let j = 0; j < messages[i].length; j++) {
      const sender = messages[i][j].getFrom();
      const subject = messages[i][j].getSubject();
      Logger.log('Sender: ' + sender);
      Logger.log('Subject: ' + subject);
    }
  }
}

GmailApp.search()で特定の件名を持つスレッドを取得するところから始める。

GmailApp.getMessagesForThreads()で各スレッド内のメールを取り出す。

各メールからgetFrom()メソッドを呼び出して送信者のメールアドレスを取得するようにした。

最後にgetSubject()で件名も取得してログに出力させるんだ。