これはなに
GAS を利用して Gmail から各種メールを取得する方法をまとめたものです。
受信メールを取得する
GAS を利用して Gmail からメールを取得する際、メールは「スレッド」というものにまとめられた状態で取得されます。
「スレッド」とは、一連のメールのやり取りをまとめたものです。
送信したメールの件名を変更せずに返信されたメール、または受信したメールの件名を変更せずに返信したメールがスレッドにまとめられます。
取得メソッド
getInboxThreads(start, max)
すべての受信トレイのスレッドを取得します。
getStarredThreads(start, max)
すべてのスター付きスレッドを取得します。
getPriorityInboxThreads(start, max)
すべての優先トレイスレッドを取得します。
getSpamThreads(start, max)
すべてのスパムスレッドを取得します。
getTrashThreads(start, max)
すべてのゴミ箱スレッドを取得します。
search(query, start, max)
検索クエリを使用してスレッドを取得します。
検索クエリは、実際に Gmail の検索ボックスで使用できるクエリと同じものが使用できます。
詳しくは以下のリンク先をご覧ください。
これらのメソッドの start と max は省略することもできますが、
メールの取得件数が多くなりすぎると処理しきれずエラーになる場合があるようなので、
指定しておいたほうが無難そうです。
送信済みメールを取得する
調べてみたところ、送信済みメールを取得する専用のメソッドは存在しないようです。
ではどうすればいいのかというと、先に挙げた
search メソッドを利用すると取得できそうでした。
以下のクエリを指定することで送信済みのメールスレッドを取得できます。
in:sent
使用例
以下はスター付きのメールを取得し、スプレッドシートにメールタイトルを出力するコードです。
function checkGmail() {
const messages = fetchGmail()
if(messages.length > 0){
writeSheet(messages);
}
}
function fetchGmail() {
const threads = GmailApp.getStarredThreads();
const messages = GmailApp.getMessagesForThreads(threads);
return messages;
}
function writeSheet(messages) {
const id = "{スプレッドシートのID}"
const spreadSheet = SpreadsheetApp.openById(id)
const sheet = spreadSheet.getSheetByName("{出力先のシートの名前}")
messages.forEach(function(message){
const mail = message[0]
const subject = mail.getSubject();
const maxRow = sheet.getMaxRows()
const lastRow = sheet.getRange(maxRow, 1).getNextDataCell(SpreadsheetApp.Direction.UP).getRow()
sheet.getRange(lastRow+1, 1).setValue(subject)
});
}