ついにPart3まできてしまいました。前回、スプレッドシートに書き込む処理が成功しました。前回の続きです。
未読のメールのみスプレッドシートに書き込み既読にする
未読であれば、条件分岐の中でメッセージ(件名・本文)を取得して、最終行に追加、その後既読にする、、、というループを作成しました。実行してみます。
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(); // 既読にする
}
}
}
実行してみます。
スプレッドシートに書き込まれました!
既読になりました!
書き込む列番号を調整する
このままだと、.appendRow(data)で配列の左から順番にデータが書き込まれていきます。これで完成…でもよいかもしれませんが、例えば「D列から書き込みたい」という場合もあるかと思います。その場合の対応方法です。
開始の列数をD列からにしたい。
配列に空白の要素を追加しておく
[rml_read_more]
配列に空白の要素を追加しておく…という方法が考えられそうです。
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(); // 既読にする
}
}
開始列が調整できました。
getRange().setValue()
getRange().setValue()で作ってみます。
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);
sheet.getRange(3,4,1,2).setValue(data);
threads[i].markRead(); // 既読にする
}
}
この場合は、3行目4列目から、1行2列に書き込みます。
書き込めました!
まとめ
Gmailの受信トレイから未読メールを取得して、スプレッドシートの本文に転記して、既読にする方法を作成しました。応用については、また色々と作っていきます。