LoginSignup
2
1

More than 1 year has passed since last update.

GASで受信・送信済みメールを取得し、スプレッドシートに出力する

Posted at

これはなに

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)
  });
}

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1