GASでGmailを検索する方法〜検索クエリでよく使う検索演算子と正規表現〜

GAS
この記事は約6分で読めます。

GASでGmailを取り扱う方法の説明、第3回です。更新忘れてて、第2回を記事化してからはや3ヶ月が経っていました汗

前回は受信したメールを検索して取得し、スプレッドシートに書き出すところまでやってきました。前回の記事は以下をご参照ください。

Advertisements

おさらい:Gmailを検索して取得するスクリプト

さて、まずは前回のおさらいです。5月21日〜5月26日までに受信したメールを取得して、その内容をスプレッドシートに書き出しています。

function search_email_and_write() {
//A.スプレッドシートの指定と書き出しデータを保持するためのlist作成
const targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test");
let output = []

//①検索する条件を作成
const start = 0;
const max = 10;
const query = "after:2020/05/21 before:2020/05/26"
var threads = GmailApp.search(query, start, max)

//②該当するスレッドのリストを取得する(今回は単一スレッド検索)
var messageForThds = GmailApp.getMessagesForThreads(threads)

//③メッセージリストからメッセージを取得する(2次元配列->1次元配列に変更)
 for(var message of messageForThds){
//④1次元のメッセージ配列から1つ目の要素を取得
let message_data = message[0];

//⑤メッセージリストからメッセージを取得する(今回は題名とメッセージIDを取得する)
var msg_date = message_data.getDate();
var msg_from = message_data.getFrom();
var msg_subject = message_data.getSubject();
var msg_body = message_data.getPlainBody().slice(0,100)

//追加:⑤で取得したデータを一旦list貸して、書き出しデータを作成するようのoutput変数(list)に追加する
let record = [msg_date, msg_from, msg_subject, msg_body]
output.push(record)
}

//追加:対象シートに書き込む(1行目はカラムのデータ、2行目以降に実際のメールデータ)->1回目だけのみカラム欄を入力するようする方が、本来はいいです。
var columns = [["date","from","subject","body"]];
targetSheet.getRange(1,1,columns.length, columns[0].length).setValues(columns);
var lastRow = targetSheet.getLastRow();//->カラムを入力後に最終行を取得するためここに記載(本来はもっといいやり方もありますが。。)
targetSheet.getRange(lastRow + 1,1, output.length, output[0].length).setValues(output)
}

今回は黄色でハイライトした、const queryの部分(検索クエリ)でよく使う検索演算子と正規表現をみていきたいと思います。

Gmail検索でよく使う【検索演算子】

GASのGmail検索で利用する検索演算子は基本的にはGmail自体の検索ボックスで利用できるものと同じです。

Gmailで利用できる検索演算子全体については、以下のページをご覧ください。ここからピックアップして紹介しています。

Gmail で使用できる検索演算子 - Gmail ヘルプ
検索演算子と呼ばれる単語や記号を使用して、Gmail の検索結果を絞り込むことができます。また、複数の演算子を組み合わせて検索結果をさらに絞

送付元を指定して検索する from演算子

まずは一番シンプルに利用されやすい特定のアドレスからのメールのみ抽出する方法です。const部分はletでもvarでも変数定義は問題ありません。検索クエリとしてfrom:を利用すればOKです。

const query = "from:メールアドレス"

ユースケースとしては、以下のような場合に有用です。

  • 支払先からの請求情報の検索
  • 特定の業務連絡メールの検索

件名に含まれる単語を指定して検索 subject演算子

次に特定のメールアドレスから、請求情報と他の情報も合わせて送付されてくるケースに、上のfrom演算子と合わせて利用したいのが、subject演算子です。

const query="subject:件名に含まれる単語"

特定のメールアドレスから、特定の件名のメールを抽出する場合。

const query="from:メールアドレス subject:件名に含まれる単語"

添付ファイルのあるメールだけ検索 has:attachemt

上の他によくあるのが、PDFやエクセルなどの添付ファイルが入っているメールだけ抽出したいという希望です。その場合に、有効なのが、has:attachmentです。

const query="has:attachment"

期間を指定する演算子 before: after:

これは例示で使っている演算子です。

const query = "after:2020/05/21 before:2020/05/26"

beforeでいつ以前を、afterでいつ以後を指定します。

Gmail検索でよく使う【正規表現】

正規表現の基本については、以下の記事で紹介させていただいています。

上の記事でも紹介したものの中から、検索に利用するケースのあるものをいくつか紹介させていただきます。

メールにurlが含まれているものを検索したい

メールの中(基本本文中)に、urlが含まれているメールだけを検索したい場合は以下です。

const query= /^https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$/

メールに固定電話や携帯電話があるものだけ抽出したい

これは、正直会社情報等をメール最後に挿入してくる相手先も多いので、単純にこれだけではうまくいかないケースもあるのですが(いらないものも抽出してしまう)、一応紹介してみます。

#携帯電話の場合
const query=/^0[789]0-\d{4}-\d{4}$/
#固定電話の場合
const query=/^0\d(-\d{4}|\d-\d{3}|\d\d-\d\d|\d{3}-\d)-\d{4}$/

まとめ

今回はqueryで利用する検索演算子や正規表現について説明してきました。

検索演算子はGASのみならず、gmailの検索タブでも利用できるので、便利だと思います。また、正規表現は複雑なパターンや特定のパターンをMECEで表現するのに非常に適しています。記号が並んでよくわからないと最初はおもうかもですが、慣れて損なことは全くないと思ってます。

次回はスレッド単位ではなく、メール単位で検索するフィルターの作り方の説明をしていきたいなと思います。

第1回:概要・基本的な検索による取得方法・カテゴリ別の取得

第2回:取得したメールをスプレッドシートに書き込む

第3回(今回):検索クエリでよく使う検索演算子と正規表現

第4回:スレッドフィルターではなくメール単位のフィルターの作り方

第5回:messageID(unique ID)を使って新規メールだけシートに追加していく方法

コメント

  1. […] GASでGmailを検索する方法〜検索クエリでよく使う検索演算子と正規表現〜GA… […]