Gmailで受信したメールでお気に入り(スター)を付けたメールの情報をスプレッドシートにリストアップしたのち、特定のラベルへ移動するApps Scriptをご紹介します
経緯
案件をピックアップするのにメーリングリストに登録していただいたのですが、毎日大量の案件情報が届くなか、自分が気になったものをひとまず分別出来ないかと思い、拾って来たスクリプトを調整して使用していたので共有させていただきます
準備
Gmailで振り分け先のラベルを作ります
新規でスプレッドシートを作成しメニューの「拡張機能」から「Apps Script」を選択し、 コード.gsにコードを書きます
使い方
対象にしたいメールを受信トレイでスターをつけ、準備していたコードを実行します
これでスプレッドシートのシート1に連番、受信日付、受信元、件名が転記されて、受信トレイから指定したラベルへメールが移動されます
コード
function myFunction() {
// 検索条件に該当するスレッド一覧を取得
var threads = GmailApp.search('label:移動元ラベル is:starred');
// スレッドを一つずつ取り出す
threads.forEach(function(thread) {
// スレッド内のメール一覧を取得
var messages = thread.getMessages();
// メールを一つずつ取り出す
messages.forEach(function(message) {
//メール受信日
var date = message.getDate();
//件名
var subject = message.getSubject();+
// メール本文
var plainBody = message.getPlainBody();
// From
var mailFrom = message.getFrom();
// 書き込むシートを取得
var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
// 最終行を取得
var lastRow = sheet.getLastRow() + 1;
// セルを取得して値を転記
sheet.getRange(lastRow, 1).setValue("=row()");
sheet.getRange(lastRow, 2).setValue(date);
sheet.getRange(lastRow, 3).setValue(mailFrom);
sheet.getRange(lastRow, 4).setValue(subject);
});
// 移動処理
var label = GmailApp.getUserLabelByName('移動先ラベル');
thread.addLabel(label);
thread.refresh();
label = GmailApp.getUserLabelByName('移動元ラベル');
thread.removeLabel(label);
thread.refresh();
});
}
コード説明
大体コメントの通りですが、カスタマイズできる部分について追加で解説します
-
検索条件に該当するスレッド一覧を取得
var threads = GmailApp.search('label:移動元ラベル is:starred');受信トレイから条件に合うメールを取得します
上の例だと移動元のラベル(これは標準の振り分け機能でつけてます)の中でスターが付いたメールを取得しています
検索の条件はクエリで細かく指定出来るので、GmailAppのsearchを調べればより細かい指定の仕方がわかるかと思います
参考:
https://tetsuooo.net/gas/1267/
-
メールを一つずつ取り出す
messages.forEach(function(message)このループでメールを1つずつ取り出して処理しています。
message.getXXX()
でメール内のいろいろな情報が取れるので、詳細はGmailAppのヘルプを参照してみてください
https://developers.google.com/apps-script/reference/gmail/gmail-message?hl=ja
-
書き込むシートを取得
var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');メール情報を書き込むスプレッドシートの書き込み先のシートを指定しています
この例だと「シート1」に書き込まれます
-
最終行を取得
var lastRow = sheet.getLastRow() + 1;シートの最後の行に追記する形にするために行を取得しています
-
セルを取得して値を転記
sheet.getRange(lastRow, 1).setValue("=row()");
sheet.getRange(lastRow, 2).setValue(date);
sheet.getRange(lastRow, 3).setValue(mailFrom);
sheet.getRange(lastRow, 4).setValue(subject);メールから取得したタイトルなどをシートの最終行の指定した列へ書き込んでいます
-
移動処理
var label = GmailApp.getUserLabelByName('移動先ラベル');
thread.addLabel(label);
thread.refresh();
label = GmailApp.getUserLabelByName('移動元ラベル');
thread.removeLabel(label);
thread.refresh();最後に移動したいラベルへ移動しています
上の例だと移動したメールに「移動元ラベル」から「移動先ラベル」へ複製をして元のメールを削除しています。
以上になります。
カスタマイズすればより細かい情報の取得や振り分けも出来るかと思いますので参考にしていただければ幸いです。