
Google Apps ScriptでGmailの下書きを一括作成する方法【みなとやの制作ハック】
前回の記事ではGmailの「テンプレート」機能を使って効率的に返信する方法をご紹介しました。でも、定型文を用いて複数名に一気にメールを作成したいケースもありますよね。本記事ではGoogle Apps Script(以下、GAS)を活用してメールの下書きを一括作成する方法をご紹介します。
活用シーン
例えば特定のメンバーへのインタビューやアンケートや共有メールなど、宛名や特定の文字列だけ変えて同じフォーマットで複数名に送りたいシーンがあると思いますが、ひとつひとつメールを作成していると工数がかかってしまいます。そんな時は今回ご紹介するGASを使えば、1クリックでメールの下書きを作成できます。
● インタビュー依頼メールの作成
● アンケート依頼メールの作成
● 特定のメンバーへの共有メール など
作成手順
● Googleスプレッドシートを作成する
まずは定型文と流し込むリストをGoogleスプレッドシートに準備します。
GASをコピペで使用する場合はC2セルにメールの件名、C3セルにメール本文のフォーマットを記入してください。B列に名前、C列にメールアドレス、D~E列にメールに流し込む文章のリストを作成します。
この時、C2セルとC3セルでリストの文言を流し込みたい箇所には図のように{名前}{趣旨}{概要}などの置換用キーワードを挿入してください。{}内のキーワードはGASを編集すれば自由に設定することが可能です。図では解りやすいように文字色を赤色にしましたが、色は変更しなくても問題はありません。
● GASを編集する
①GASの編集画面を開く
Googleスプレッドシートの「ツール」→「スクリプトエディタ」をクリックしてGASのエディタを開いてください。
②以下のコードを入力
エディタに以下のコードをコピペしてください。
//メニューバーに「下書き一括作成」を追加するコード function onOpen(){ const spreadsheet = SpreadsheetApp.getActive(); const menuItems = [{name: '実行', functionName: 'createEmailsDraft'}]; spreadsheet.addMenu('下書き一括作成', menuItems); } //下書きを一括作成するコード function createEmailsDraft(){ const spreadsheet = SpreadsheetApp.getActive(); //シート「下書き作成ツール」をアクティブにしてリストを取得 spreadsheet.setActiveSheet(spreadsheet.getSheetByName("下書き作成ツール")); const sheet = SpreadsheetApp.getActiveSheet(); //CC用のメールアドレスを設定 //複数設定したい場合は、カンマ区切りで指定してください const CC = "****@****.co.jp"; //6行目から最終行までループ処理 const lastRow = sheet.getLastRow(); for(let i = 6; i <= lastRow; i++){ //行ごとに2列目の「名前」を取得 const name = sheet.getRange(i, 2).getValue(); //行ごとに3列目の「メールアドレス」を取得 const to = sheet.getRange(i, 3).getValue(); //行ごとに4列目の「趣旨」を取得 const title = sheet.getRange(i, 4).getValue(); //行ごとに5列目の「概要」を取得 const content = sheet.getRange(i, 5).getValue(); //行ごとにC2セルの内容を取得して{名前}をnameに置換 const subject = sheet.getRange(2, 3).getValue() .replace('{名前}',name); //行ごとにC2セルの内容を取得して{名前}をnameなどに置換 //nameは正規表現を用いて文章中の{名前}すべてを置換 const message = sheet.getRange(3, 3).getValue() .replace(/{名前}/g,name) .replace('{趣旨}',title) .replace('{概要}',content); //取得した内容をGmailで下書き作成 GmailApp.createDraft(to, subject, message, {cc: CC}); } }
コピペをしたら、任意の名前で保存(Ctrl+S)をしてください。
● 動作確認をおこなう
Googleスプレッドシートを再読み込みすると、メニューに「下書き一括作成」が表示されているはずです。
「下書き一括作成」>「実行」をクリックして、GASを実行してください。初回のみGmailとの連携を求められますので、承認してください。
数秒程度でGmailの「下書き」に件数分のメールが作成されます。
メールの件名と本文の特定のキーワードが置換され、宛先やCCのアドレスもリストの内容に沿ってそれぞれ入力されていると思います。
以上で最初の設定は完了です。
あとは使用したいタイミングでリストを編集して、「下書き一括作成」>「実行」をクリックすれば、メールを一括作成できます。内容に問題がないか確認後、送信すれば完了です。
なお、私は事前確認用に下書き保存をするコードにしていますが、44行目の「GmailApp.createDraft();」を「GmailApp.sendEmail();」に変更すれば、下書き保存せずにそのまま送信することも可能です。ただ、もし「GmailApp.sendEmail();」に変更する場合も、最初は「GmailApp.createDraft();」で動作確認をした方が安全です。
また、もしTOやCCを複数設定したい場合は、カンマ区切りで指定してください。
注意点
● 送信数の上限について
2020年5月現在、1 日の送信数の上限は2,000通、試用ユーザーは500通。「GmailApp.sendEmail();」で直接送信する場合にはG Suiteユーザーは1,500通、無料ユーザーは100通のメール送信制限があります。上回る送信件数にならないようにご注意ください。
※参考サイト:送信に関する制限事項
https://support.google.com/a/answer/166852?hl=ja
※参考サイト:Quotas for Google Services
https://developers.google.com/apps-script/guides/services/quotas
● 最終行について
21行目の「lastRow」で最終行を取得し、6行目から最終行まで繰り返し処理を行っています。しかし、例えば106行目に半角スペース一文字でも入っていると、その行を最終行と認識して、100件分の空白メールが作成されてしまいます。
半角スペースなどが入らない前提のコードとなっておりますので、もしそのような状況が発生する懸念がある場合には、実行前に余分な行を削除するフローを加えたり、21行目の「lastRow」を以下のコードに変更して特定の列の最終行のみを取得するなど、適宜変更して予防してください。
const lastRow = sheet.getRange(sheet.getMaxRows(), 2).getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
※上記のコードでも、B列に半角スペースなどが含まれると空白メールが作成されます。
さいごに
このGASを使えば、都度作成していたメールをより効率的に作成することが可能です。ぜひ使ってみてくださいね。
ディップは2019年3月に構造的な人手不足を解消する「labor force solution company」へと進化し、AI・RPA領域で新事業を開始したほか、社内でRPAやVBAのオンライン講座を開催するなど、社員が自身の業務を改善できるように取り組んでいます。
※プレスリリース
「構造的な人手不足を解消する“Labor force solution company”へ進化 ディップがAI・RPA領域で新事業を開始! ~新ブランドステートメントを策定~
https://www.dip-net.co.jp/news/175
私が所属するクリエイティブ統括部でも、RPAやVBA、Excelなどを積極的に活用して日々業務改善に取り組んでいます。業務改善に興味があるという方は、ぜひ以下の採用情報をご覧ください。