// Gmail内にある検索条件に一致するメールの本文をスプレッドシートのシートごとに書き込むメソッド
function searchGmailMakeSpreadSheet() {
// 取得したメールの件数のインデックス
var num = 0;
// シート名
var sheetName = "";
// sampleフォルダー配下にスプレッドシート"gmail"を作成
var newSheet = createSpreadsheet("1_fD_XDbrDIFDrdgn_dRbFRChEdQ1tFqF", "gmail");
// 作成したスプレッドシートのIDを取得
var sheetId = newSheet.getId();
// ID指定をしてスプレッドシートを開く
var newSpreadSheet = SpreadsheetApp.openById(sheetId);
// 検索条件に該当するスレッド一覧を取得(キーワード:出前館、件数:3件に設定)
var threads = GmailApp.search("出前館", 0, 3);
// 条件に該当するメッセージスレッドを取得
var messagesForThreads = GmailApp.getMessagesForThreads(threads);
// スレッドを一つずつ取り出す
threads.forEach(function(thread) {
// メールの件名を取得
var subject = messagesForThreads[num][0].getSubject();
// 取得したメールの1件目から1つずつ増やしていく
num++;
// 件名をシート名に設定
newSpreadSheet.insertSheet(subject);
// デフォルトで作成されている「シート1」を取得
var delSheet = newSpreadSheet.getSheetByName("シート1");
// デフォルトシートを削除
if (delSheet != null) {
newSpreadSheet.deleteSheet(delSheet);
}
// スレッド内のメール一覧を取得
var messages = thread.getMessages();
// メールを一つずつ取り出す
messages.forEach(function(message) {
// メール本文を取得
var plainBody = message.getPlainBody();
// メール本文が取得できているかログに出力して確認
Logger.log(plainBody);
// 改行単位でカンマ区切りにする(配列のイメージ)
var txtLines = plainBody.split(/[\s]+/);
// 配列の全ての要素に対してスプレッドシートに書き込み処理を行う
Array.from(txtLines, x => outputLog(x, newSpreadSheet));
});
});
}
// スプレッドシートに出力するメソッド
function outputLog(txt, newSpreadSheet) {
// txtが存在するとき書き込む
if (txt != null) {
newSpreadSheet.appendRow([txt]);
}
}
// フォルダに新規にスプレッドシートを作成(第1引数:フォルダID, 第2引数:ファイル名)するメソッド
function createSpreadsheet(folderID, fileName) {
// フォルダIDから該当フォルダを取得
var folder = DriveApp.getFolderById(folderID);
// スプレッドシートを指定されたファイル名で作成
var newSpreadSheet = SpreadsheetApp.create(fileName);
// IDを指定してファイルを取得
var file = DriveApp.getFileById(newSpreadSheet.getId());
// オリジナルのファイルで書き込みを行うと、想定通りにいかないのでコピーを作成
var copiedFile = file.makeCopy(fileName, folder);
// コピー元のファイルを削除
file.setTrashed(true);
// コピーしたファイルを返す
return copiedFile;
}