スプレッドシートからGmail下書き作成(GAS)
目次
※本ページ先頭に戻りたい場合は画面右下のボタンを押して下さい。
概要
スプレッドシートから下記情報を取得し、複数件のGmail下書き作成を行う
- 件名
- メールアドレス(TO)
- メールアドレス(CC)
- 本文
- 署名
プログラムを作成した理由
弊社では定例作業終了後の「お客様への完了連絡」をGmailで行ってるが、
「A社への連絡を誤ってB社に送ってしまう…」というミスが頻発していた。
↑の防止策が「より一層注視し、トリプルチェックするようにします!」
という現場猫のような無策っぷり…
「ミスをそもそも発生させない仕組みを作る」のが基本の為、
- 下書きはプログラムで自動作成
- 送信前に作業者が目視チェックし、OKならばGmail送信
という作業フローに変更する為に作成。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | function create_gmail_draft(){ //列位置 const ACTION_FLG_COLUMN = 1 const SUBJECT_COLUMN = 3 const TO_COLUMN = 4 const CC_COLUMN = 5 const NAME_COLUMN = 6 const GREETING_COLUMN = 7 const CONTENT_COLUMN = 8 const SINCERELY_COLUMN = 9 const SIGNATURE_COLUMN = 10 const MAIL_COLUMN = 3 //行位置 const START_ROW = 6 const MAIL_TITLE_ROW = 2 const MAIL_TEXT_ROW = 3 //作成フラグ const ACTION_FLG = "○"; //シート参照 let spreadsheet = SpreadsheetApp.getActive(); let sheet = spreadsheet.getSheetByName('下書き作成ツール'); //B列_空白を除いた最終行取得 let lastRow = sheet.getRange(sheet.getMaxRows(), NAME_COLUMN).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); //出力済みフラグ初期化 var output_Flg = false; //6行目から最終行までループ処理 for(let i = START_ROW; i <= lastRow; i++){ //行ごとに「実行フラグ」を取得 let action_Flg = sheet.getRange(i, ACTION_FLG_COLUMN).getValue() //実行フラグが「○」の場合のみ実行 if(action_Flg === ACTION_FLG){ //出力済みフラグ更新 var output_Flg = true //「名前」取得 let name = sheet.getRange(i, NAME_COLUMN).getValue() //「メールアドレス(TO)」を取得 let to = sheet.getRange(i, TO_COLUMN).getValue() //「メールアドレス(CC)」を取得 let cc = sheet.getRange(i, CC_COLUMN).getValue() //「挨拶」を取得 let greeting = sheet.getRange(i, GREETING_COLUMN).getValue() //「趣旨」を取得 let content = sheet.getRange(i, CONTENT_COLUMN).getValue() //「敬具」を取得 let sincerely = sheet.getRange(i, SINCERELY_COLUMN).getValue() //「署名」を取得 let signature = sheet.getRange(i, SIGNATURE_COLUMN).getValue() //「件名」を取得 let subject = sheet.getRange(i, SUBJECT_COLUMN).getValue() //メールテンプレートの本文に反映 let message = sheet.getRange(MAIL_TEXT_ROW, MAIL_COLUMN).getValue() .replace('{名前}',name) .replace('{挨拶}',greeting) .replace('{趣旨}',content) .replace('{敬具}',sincerely) .replace('{署名}',signature) //取得した内容をGmailで下書き作成 GmailApp.createDraft(to, subject, message, {cc: cc}) } } //1件でも下書き作成した場合 if(output_Flg){ Browser.msgBox("完了しました!Gメール下書きをご確認下さい。"); //全て「×」で下書き作成を行わなかった場合 }else{ Browser.msgBox("出力対象が存在しませんでした。"); } } |
ソースコード解説
難しい事は何もなく、下記1文でメール下書き作成が出来ます。
1 2 | //Gmail下書き作成 GmailApp.createDraft(toの宛先, 件名, 本文, {cc: ccの宛先}) |
ソースコードが若干長くなっているのは、
下記画像のナンバリング先を
スプレッドシート上で手動設定させる事に拘った為です。(※コードに固定値を持たせると「あれも反映して!これもやって!」と後出しで言われた時に面倒くさい)
感想
私が日々運用するには非常に便利で、
「宛先や文章ミスしていないかな…」と不安になりながら
目視チェックする苦行から解放されました
数週間のセルフ運用にて動作確認後、
上司に「メール送信のトリプルチェックしてもミスが減らない件、本プログラムを用いる事でミスを大幅に減らせると思いますが、いかがでしょうか?」と提案したところ
上司「便利なのは分かるんだけど、仮に送信ミスが発生した際は全て君の責任になってしまうからね…今のままトリプルチェックで対応させるよ」と断られました
下記2で「作業者自身が確認して送信」しているのだから、
開発者の責任ではないと思うのですが…
- 下書きはプログラムで自動作成
- 送信前に作業者が目視チェックし、OKならばGmail送信
クレーマーの如く責任転嫁されても確かに困るので、
「そうですか、残念です」とこの話は終わりました←
編集履歴
2022/10/30 新規作成