件名に特定の文字列が含まれるメールを、スプレッドシートに転記する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です。お問い合わせの受付完了通知などにどうぞ。