あるメーリングリスト(Google グループ) に送信しているメールアドレスの一覧を作りたかったので今回のスクリプトを書きました。
普段 Gmail を使われている場合、Google Apps Script (GAS) を使うことでメールの処理をスクリプトで簡単に自動化することができます。
今回は、Gmail で受信したメールを検索し、検索結果を Google スプレッドシートに書き出す方法を紹介します。
ウェブ上のツールでスクリプトを少し書くだけで実現できます。メールを使う業務の自動化に応用できると思います。
1. Gmail の検索条件を作る
Gmail を開き、検索窓を使って対象のメールを絞り込みます。
to:
や label:
などの演算子を活用して、絞り込んでください。
例えば、 mailinglist@example.com
に向けて送信されている、 14日以内に受信したメールを絞り込む場合、
to:mailinglist@example.com newer_than:14d
として検索します。
その他の演算子はこちらに紹介があります。
作成した検索条件は記録しておきます。
2. 書き出し先のスプレッドシートを作る
Google スプレッドシートを開きます。
https://docs.google.com/spreadsheets/
「新しいスプレッドシートを作成」の「空白」を選択します。
作成されたスプレッドシートのURL を確認します。
https://docs.google.com/spreadsheets/d/<ここの部分>/edit#gid=0
上記の、英語の乱数部分がスプレッドシートのIDです。これを記録しておきます。
3. Google Apps Script を作る
https://script.google.com/ を開きます。
「新しいプロジェクト」をクリックします。
「無題のプロジェクト」となっている箇所をクリックし、「メールをスプレッドシートに書き出し」など、適当に変更します。
スクリプトの内容は、下記内容をそのままコピペします。
function exportGmails() {
var book = SpreadsheetApp.openById('<ここにスプレッドシートIDを記入>');
var criteria = '<ここにGmail検索条件を記入>';
var threads = GmailApp.search(criteria);
var sheet = book.getActiveSheet();
sheet.getRange(1, 1).setValue('日付');
sheet.getRange(1, 2).setValue('宛先');
sheet.getRange(1, 3).setValue('From');
sheet.getRange(1, 4).setValue('ReplyTo');
sheet.getRange(1, 5).setValue('件名');
for (var i = 0; i < threads.length; i++) {
messages = threads[i].getMessages();
message = messages[0];
console.log(message.getFrom());
rowNumber = i + 2;
sheet.getRange(rowNumber, 1).setValue(message.getDate());
sheet.getRange(rowNumber, 2).setValue(message.getTo());
sheet.getRange(rowNumber, 3).setValue(message.getFrom());
sheet.getRange(rowNumber, 4).setValue(message.getReplyTo());
sheet.getRange(rowNumber, 5).setValue(message.getSubject());
}
}
<ここにスプレッドシートIDを記入>
の箇所を、2で作成した スプレッドシートのURLに含まれるIDに書き換えます。
<ここにGmail検索条件を記入>
の箇所を、1で作成した Gmailの検索条件に書き換えます。
保存ボタンを押して、実行を押します。
初回起動時は、「承認が必要です」というダイアログが表示されるので、「権限を確認」をクリック。
個人用の Gmail の場合、「このアプリは Google で確認されていません」となるので、「詳細」をクリックして 「(安全ではないページ)に移動」をクリック。
(企業の Google Apps の場合、この警告は出ません)
許可ダイアログで「許可」をクリック
するするっとコードが実行されて、スプレッドシートに書き込まれます。
スプレッドシートに書き出す項目を変更する場合、コードを修正してください。
コード中に、message.getDate()
, message.getTo()
などのメソッドでメール内の属性を取得していますが、その他の属性も書き出すことができます。メールオブジェクトのメソッドのリファレンスはここにありますので参考にしてください。