Gmailにあるメールから、スプレッドシートに記入してある注文番号と、注文入力時につけられた注文ラベルをもとに、スレッドを検索して、検索結果に対して新たなラベル付けをしたかった。
参考Webをもとに、作ったGASが、以下。
function AddOrderLAbel() { //スプレッドシートを取得し var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシート内のシートを取得します。 ex)シート名「注文番号」 var sheet = spreadsheet.getSheetByName("注文番号"); //シート内の値を取得するにはgetRange(x,y).getValue()を使います var value = sheet.getRange(2,1,sheet.getLastRow() - 1).getValues(); var strTerms = 'label:A注文 subject:{' + value.join(" ") + '}'; // Gmailでの検索キーワード //console.log(strTerms); var myThreads = GmailApp.search(strTerms); // スレッドを一つずつ取り出す myThreads.forEach(function(thread) { // スレッド内のメール一覧を取得 var messages = thread.getMessages(); // メールを一つずつ取り出す messages.forEach(function(message) { // スレッドにラベルを付ける var label = GmailApp.getUserLabelByName('2.Pere'); // 既存のラベルでないと失敗するので注意 thread.addLabel(label); }); }); }
参考web:
Google Apps Scriptとラベルで実現する管理業務のすゝめ | キャスレーコンサルティング株式会社
【GAS】Gメールのラベル機能まとめ【サンプルソース付】 | 快 ブログ
Googleスプレッドシートはこんなイメージ。
で、ここまで作って、テストしてうまく動いたので、後はタイマーで定期的に実行させればいいかなっ・・・と思ったのだが、タイミング悪く、もっといい方法に気が付いてしまった。
よく考えると、以下のようなスプレッドシートに作っておいて、文字の入ったセルを範囲選択してコピーし、Gmailの検索ボックスにペーストしたら、アナログ作業ながら検索までは、できる。
で、結果をもとに、好きなラベルをつけたり、不要なラベル削除したり、としたほうが良いのではないか。
プログラム化・システム化せずに、現場でマニュアルコントロールが可能なようにしておいた方が、今回はよいだろう。
なので、残念ながら、せっかく作ったコードはお蔵入りになりそう。