見出し画像

GAS Sample_未回答者にリマインドメール送信

会議の出欠を取る際、「メールにて出欠をお知らせください」も良いですが
スプレッドシートにメンバー一覧を用意し、「各自ご記入ください」にすると運用が楽になります。
さらに[データの入力規則]で出席/欠席を用意しておくとレスポンスが早くなり良いです。

画像1

しかしながら、「まだ予定がわからず記入できない」としたまま、記入を忘れるメンバーもいます。
そのメンバーに一括で「入力リマインドメール」を送信するスクリプトを構築します。

列Cにメールアドレスを準備します。

画像2

シート[mail]には以下のような「件名/本文」を用意します。

画像3

スクリプトはこちら。
(メール送信/下書き作成メニューも実装しています)

function createMailData(doSend){
 
 //スプレッドシート、および各シートを取得
 const ss         = SpreadsheetApp.getActiveSpreadsheet();
 const inputSheet = ss.getSheetByName('input')
 const mailSheet  = ss.getSheetByName('mail')
 
 //mailSheetのセルB1-B2から件名、本文を取得
 const subject = mailSheet.getRange(1, 2).getValue();
 const body    = mailSheet.getRange(2, 2).getValue();
 
 //inputSheetの最終行を取得、メアドを格納する変数recipientを準備
 const lastRow   = inputSheet.getLastRow();
 let   recipient = '';
 
 //inputSheetの列Bが空白ならメアドを追加
 for(let i = 3 ;i <= lastRow ; i++){
   if(inputSheet.getRange(i, 2).getValue() === "")
     recipient += inputSheet.getRange(i, 3).getValue() + ',';
 }
 if (doSend) {
   GmailApp.sendEmail(recipient, subject, body); //送信  
 } else {
   GmailApp.createDraft(recipient, subject, body); //下書き   
   
 }
}

function sendMail() {
 
 //誤操作による誤送信防止のためにダイアログを実装
 if (Browser.msgBox('メール送信しますか?', Browser.Buttons.OK_CANCEL) == 'cancel') {
   return;   
 } 
 createMailData(true);
}

function createDraft() {
 
 createMailData(false);
}

function onOpen(){
 
 SpreadsheetApp.getUi()
 .createMenu('スクリプト')
 .addItem('メール送信', 'sendMail')
 .addItem('下書き作成', 'createDraft')
 .addToUi();
}


会議前日にチェックした際、以下のようにcccさん/gggさん/kkkさんが未入力だった場合、スクリプトを実行すると

画像6

画像7

3名のメアドがToに挿入されたメールが生成されます。

今回は「会議の出欠」をテーマに用いましたが、
「アンケートの記入」や「健康診断の予約」などにも応用できるかと思います。

【エラー,および意図しない結果に至るリスクの認識】

自分以外も編集できるスプレッドシートの場合、スクリプトを実行する際にエラーや意図しない結果に至るリスクが生じます。
このシートに関して、エラー及び意図しない結果に至る主なリスクは以下のようなことが挙げられます。

●シート名を変更される
●列Cメアドを削除、変更される
●列Bに中途半端な返答を記入される(「?」「あとで書く」など)

Google Apps Scriptを実行する際には、常にエラーのリスクを意識することを心がけます。

※続きの記事を書きました




この記事が気に入ったらサポートをしてみませんか?