件名に特定の文字列が含まれるメールを、スプレッドシートに転記するGoogle Apps Scriptです。フォームで受け付けたい・・けどメールでも受付せざるを得ない・・という時などに。
特にありません。今お使いのスプレッドシートに組み込めます。
スクリプトの「事前設定エリア」部分を書き換えます。
「何日以内のメール」を対象とするかを指定します。30と指定すれば30日以内に受信したメールから探します。
あまり長い期間にすると動作が遅くなるかもしれませんので、短めで試すことをおすすめします。
書き換えが終わったら保存して、関数「onOpen」を一度実行しておきましょう。
上のメニューにある「スクリプト実行」から「特定のメールをスプレッドシートに転記する」を実行します。
検索条件を聞いてくるので、お好きなキーワードを入力してください。
ここで入力した文字がメールの件名に含まれていれば、スプレッドシートへのコピー対象になります。
件数によりますが、しばらく待つとこのようにスプレッドシートにメールが書き出されます。
銀のさらの利用頻度が高めですね・・・節約しなくては・・・
「#ERROR!」になっているのは、メール本文がイコールで始まっているため数式と判断されているためです。
このサンプルコードではメール本文の取得に getPlainBody() を使っています。HTMLメールを取得したい場合は getBody() に書き換えてください。
/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00071/index.html
 */
function onOpen() {
  // スプレッドシートを開いたときに実行される関数
  // UIの取得
  const ui = SpreadsheetApp.getUi()
  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');
  // メニューに追加するボタン
  menu.addItem('特定のメールをスプレッドシートに転記する', 'copy_mail_to_sheet');
  // メニューを画面に追加する
  menu.addToUi();
}
function copy_mail_to_sheet() {
  // ########## 事前設定エリアここから ##########
  // メールを検索する期間をセットしてください。「30」の場合は30日前から本日のメールが対象になります。
  const term = 30;
  // ########## 事前設定エリアここまで ##########
  // スプレッドシートを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // アクティブなシートを取得
  const sheet = ss.getActiveSheet();
  // UIを取得
  const ui = SpreadsheetApp.getUi();
  // 検索キーワードを入力する画面を表示する
  const response = ui.prompt('検索キーワードを入力してください(件名が対象です)', ui.ButtonSet.OK_CANCEL);
  // キャンセルが押されたらスクリプトを終了する
  if(response.getSelectedButton() == ui.Button.CANCEL){
    return;
  }
  // 検索期間を指定するための日付を取得する
  let date = new Date(); // 現在の日時を取得
  date.setDate(date.getDate() - term); // 事前設定した日付分、遡る
  date = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd'); // 日付のフォーマットを変更する
  // メールを検索するための条件を作る
  const query = 'Subject:' + response.getResponseText() + ' after:' + date;
  // Gmailからメールを取得する
  const threads = GmailApp.search(query);
  // 検索条件にマッチするメールがない場合はアラートを出してスクリプトを終了する
  if(threads.length == 0){
    ui.alert('メールが見つかりませんでした');
    return;
  }
  // シートに書き込む用の配列を準備
  let values = [];
  // メールを1スレッドずつ処理していく
  for (let i = 0; i < threads.length; i++) {
    // スレッドの中にメッセージ(メール)が入っているので取得する
    let messages = threads[i].getMessages();
    // メッセージを1つずつ処理していく
    for (let j = 0; j < messages.length; j++) {
      let mail_subject = messages[j].getSubject(); // 件名を取得
      let mail_from = messages[j].getFrom(); // 送信元メールアドレスを取得
      let mail_date = messages[j].getDate(); // 受信日時を取得
      let mail_body = messages[j].getPlainBody(); // メール本文を取得
      // シート書き込み用の配列に追加する
      values.push([mail_date, mail_from, mail_subject, mail_body]);
    }
  }
  // 書き込むデータに合ったrangeオブジェクトを取得する
  const range = sheet.getRange(sheet.getLastRow() + 1, 1, values.length, values[0].length);
  // スプレッドシートに書き込む
  range.setValues(values);
}
  フォームが送信されたら、その内容とともにSlackに通知してくれるGoogle Apps Scriptです。お問い合わせが来たときにチーム全員がすぐ知りたいときにどうぞ。
シートにあるN日以前の行を自動的に削除するGoogle Apps Scriptです。シートにログを出力していると肥大化しがちなので作りました。
Gmailに届いた特定のメールに対し、自動的に定型文を返すGoogle Apps Scriptです。お問い合わせの受付完了通知などにどうぞ。