前回の続きです。前回は、受信トレイの未読のメールを既読にするスクリプトができました。次は、スプレッドシートに書き込む処理を作ってみます。
スプレッドシートに書き出す
取得したメールの本文をスプレッドシートに書き込んでいきます。
function searchMails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('メール取得');
const threads = GmailApp.getInboxThreads(); // 受信トレイのスレッドを取得
threads.forEach(thread => {
const messages = thread.getMessages();
Logger.log(threads);
messages.forEach(message => {
let subject = message.getSubject(); // 件名
let body = message.getPlainBody(); // 本文
let data = [subject, body];
// 行追加
sheet.appendRow(data);
});
});
}
スクリプトを実行すると、受信トレイのメールがスプレッドシートに書き込まれます。
スプレッドシートにメールが追加されました。
ただし、この場合は受信トレイの全部のメールが書き込まれていきますので、実行するたびに行が追加されてしまいます。
例えば、「未読のメールのみ追加して、実行したら既読にする」といった処理をすると良いかもしれません。
未読のメールを取得する
前回の復習ですが、Gmailの受信トレイのスレッドを取得して既読にするには、下記のようなコードで可能です。
受信トレイのスレッドを取得して既読にします。
function markAsRead() {
const threads = GmailApp.getInboxThreads(); // 受信トレイのスレッドを取得
for (var i = 0; i < threads.length; i++) {
if (threads[i].isUnread()) { // 未読の場合
threads[i].markRead(); // 既読にする
}
}
}
スクリプトを実行すると、受信トレイの未読メールが全て既読に変わります。
組み合わせる
あとは、これらを組み合わせることで、完成、、、するはずです。
[rml_read_more]
未読であれば、条件分岐の中でメッセージ(件名・本文)を取得して、最終行に追加、その後既読にする、、、というループを作成しました。実行してみます。
function searchMails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName('メール取得');
const threads = GmailApp.getInboxThreads(); // 受信トレイのスレッドを取得
for (var i = 0; i < threads.length; i++) {
if (threads[i].isUnread()) { // 未読の場合
const message = threads[i].getMessages();
let subject = message[0].getSubject(); // 件名
let body = message[0].getPlainBody(); // 本文
let data = [subject, body];//配列に格納
Logger.log(subject);
Logger.log(body);
sheet.appendRow(data);
threads[i].markRead(); // 既読にする
}
}
}
実行してみます。
スプレッドシートに書き込まれました!
既読になりました!
まとめ
Gmailの受信トレイから未読メールを取得して、スプレッドシートの本文に転記して、既読にする方法を作成しました。応用については、また色々と作っていきます。