GoogleAppsScript(GAS)でGmailのメールの内容を取得しよう

みなさん、こんにちは!
現役エンジニアの”よし”です。

今回はGoogle Apps Scriptを使って、Gmailのメールの内容を取得する方法を紹介します。
検索方法も様々あるのですが、初歩的な検索を今回は紹介できればと思います。

もちろん、Googleが提供する公式ドキュメントに書いてありますが、
さらに分かりやすく、探す手間も省いて説明していきますね!

Google Apps Scriptの導入方法についてはこちらで紹介しています。

Google Apps Scriptの導入方法

① Gmailからメールを取得しよう

GASでメールを取得するのはいたって簡単です。
Gmailにはスレッド形式になっています。
また、そのスプレッドシートの取得の仕方も2つありますので、1つずつお話します。

関数内でこちらを記入してみてください。

function myFunction() {
   // メール(スレッド)取得①
   let mailThreads = GmailApp.search('to:mail@test.co.jp');
   Logger.log(mailThreads);

   // スレッドからメールを取得する②
   let threads = GmailApp.getMessagesForThreads(mailThreads); 
   Logger.log(threads);
}

スレッドと、スレッドの中身を表示するには、①と②のコードをfunction内に書きます。
これでmyFunctionを実行すると、以下のような結果がログとして表示されます。(画像)
①、②が実行されると、以下のような結果が得られます。

では、1つ1つのコードを詳しく見ていきましょう。

② Gmail内のメールを検索しようGmailApp.search()

検索する方法は様々ありますが今回は、メールを受け取ったメールアドレスで検索をかけてみます。
メールを受け取ったメールアドレスで検索するには以下のコードを使うと良いです。
「メールアドレス」の部分にメールアドレスを記載してください。

GmailApp.search('to:メールアドレス');

 

上記のコードを使うことで、Gmailの中を検索し、スレッドごとメールを取得できます。
まずは、以下を関数内に入れてみてください。

function myFunction() {
   // メール(スレッド)取得①
   let mailThreads = GmailApp.search('to:mail@test.co.jp');
   Logger.log(mailThreads);
}

その後、myFunctionを実行すると以下のような結果が得られます。

Logger.log(mailThreads);によって配列でスレッドごと取得できていることがわかります!

③ 取得したスレッドの中身も取得してみようGmailApp.getMessagesForThreads();

②のままではスレッドの中身まで取得はできていないので、以下のコードを使ってスレッドの中身を取得しましょう。

   let threads = GmailApp.getMessagesForThreads(mailThreads); 

上記のコードを使うことで、Gmailの中を検索し、スレッドの中身が取得できます。
以下を関数内に入れます。

function myFunction() {
   // メール(スレッド)取得①
   let mailThreads = GmailApp.search('to:mail@test.co.jp');
   Logger.log(mailThreads);

   // スレッドからメールを取得する②
   let threads = GmailApp.getMessagesForThreads(mailThreads); 
   Logger.log(threads);
}

その後、myFunctionを実行すると以下のような結果が得られます。

Logger.log(threads);によって配列でスレッドの中身も取得できていることがわかります!
GmailMessageが配列で並んでおり、スレッドの中身もしっかり取得できていることがわかります。
この形式はいわゆる2次元配列という配列で、私はいつも配列の中の配列とよんでいます。

ここまで、スレッドとスレッドの中身を取得できました。
ただ、このままではスレッドの中身を取得できてもその中身の内容まで取得できていません。
次は、スレッドの中身の内容まで取得してみましょう。

④スレッドの中身を取り出して、内容を取得する

1つ1つのメッセージを取得するには、メッセージの関数を使います。
日時、宛先、送信者、件名、内容の5つを取得してみます。
今回は、基本的な関数のみ使ってみます。

  1. 日時:getDate()
  2. 宛先:getTo()
  3. 送信者:getFrom()
  4. 件名:getSubject()
  5. 内容:getPlainBody()

 

function myFunction() {
   // メール(スレッド)取得①
   let mailThreads = GmailApp.search('to:mail@test.co.jp');
   Logger.log(mailThreads);

   // スレッドからメールを取得する②
   let threads = GmailApp.getMessagesForThreads(mailThreads); 
   Logger.log(threads);

  // スレッドごとに内容を取得する
  threads.forEach(function (thread) {
  // メッセージ内容を取得
  thread.forEach(function (message){
   // 送信日時
   let date = message.getDate();
   Logger.log(date);
   // 宛先
   let to = message.getTo();
   Logger.log(to);
   // 送信者
   let from = message.getFrom();
   Logger.log(from);
   // 件名
   let subject = message.getSubject();
   Logger.log(subject);
   // メール内容
   let body = message.getPlainBody(); 
   Logger.log(body);
  });
 });
}

Logger.log()を利用して、すべて取得できているか確認してみてください!
その後、myFunctionを実行するとLogger.log()によって中身を取得できます。

まとめ

いかがでしたでしょうか?
メールの内容を取得できれば、中身を分類することができたり、分析できるようになるという利点があります。
本業の方では実際に、特定のメールアドレスにきたメールを分析し、誰がどのくらいアクティブに活動しているかや、AWSのJsonをメールで取得しておき、その中身をスプレッドシートに展開するということもしています。

今回はスプレッドシートに表示するところまで紹介しませんでしたが、次回は表示まで紹介していこうと思います。

Google Workspaceを活用している場合はGoogle Apps Scriptを覚えると業務の効率化および自動化ができます。
Google Apps Scriptが学べるスクールはコチラで紹介しています。よかったら見てみてください。

Google Apps Scriptを学べるスクール3選

Google Apps Scriptが学べたらコチラの記事で収益化してみてはいかがでしょうか?

Google Apps Scriptのプロが教える!成功するGAS副業完全ガイド

以上、最後までお読みいただきありがとうございました。

最新情報をチェックしよう!