前回に続いて、またまたバッチシリーズです。
セキュリティ事故の大半はメール誤送信と言われ続けながらも、月一のレポートはPDFにしてメールで送らなければいけない私。
定型のレポートメールを送るたびに誤送信を恐れるぐらいなら、バッチにして早く、安全、確実に自動送信してしまいましょう。
ということで、レポートメールの自動送信バッチを作ったので紹介します。
※初めてのGASなので間違いがあればご指摘頂けると幸いです。
前提
- Gmail, Google ドライブ を利用
- もちろんGoogleアカウントが必要
- バッチは Google Apps Script で作成
- レポート内容は月末に PDF でメールに添付
- PDF は当月中(月末)に作成する
- PDF は Google ドライブ に配置
- メール内容は固定
- 送信先とメール本文は固定
- 件名と添付ファイル名の末尾には年月を入れる
レポートメール送信手順
- レポートをPDFで作成
- Google ドライブ の送信用フォルダにPDFをコピー
- Google Apps Script でスクリプトを実行
- メール送信が完了したら、レポートファイルが送信済みフォルダに移動されていることを確認
- 念のために Gmail で送信済みメールを確認
毎月の定型作業がたったこれだけで(早く、安全、確実に)終わるのですから、楽ちんですね。
備考
- 送信用フォルダにコピーするファイル名はスクリプトでリネームするので、名前は何でも構いません
- 【注意】送信用フォルダに配置するファイルは一つだけにしてください
- 最初のスクリプト実行時には許可を求められるので「許可を確認」を選択してください
スクリプト作成手順
- Google ドライブ に送信用フォルダと完了用フォルダを作成
- 送信用:ex) "01_Ready_For_Sending_Report"
- 完了用:ex) "02_Finished_Sending_Report"
- フォルダ名は何でも構いません(後から変更しても大丈夫です)
- 上記のフォルダIDを取得(あとでScriptに貼り付けます)
- フォルダIDの取得方法は以下を参考にしてください
- Google Apps Script でスクリプトを作成
- スクリプトの作成方法は以下を参考にしてください
- スクリプトエディタに以下のScriptをコピーして、必要な箇所を自分用に書き換えてください
- 送信用フォルダID
- 完了用フォルダID
- リネーム後のファイル名(のプレフィックス)
- 送信先メールアドレス
- メールタイトル(のプレフィックス)
- メール本文
Script
function sendReportMail() {
// 【注意】以下の定数は自分用に書き換えて下さい
const folderIDReady = "送信用フォルダIDを入力"; // For "01_Ready_For_Sending_Report"
const folderIDFinished = "完了用フォルダIDを入力"; // For "02_Finished_Sending_Report"
const fileNamePrefixForSending = "リネーム後のファイル名(のプレフィックス)を入力"; // ex) "Report"( + "_202103.pdf")
const to = "送信先メールアドレスを入力";
const subjectPrefix = "件名(のプレフィックス)を入力"; // ex) "【レポート】"( + "_202103")
const body = "メール本文を入力"; // ex) "お世話になっております。○です。\n\n今月のレポートになりますのでご確認願います。"
// Get report
let reportFile = DriveApp.getFolderById(folderIDReady).getFiles().next();
// Check lastUpdated
const lastUpdated = Utilities.formatDate(reportFile.getLastUpdated(), "Asia/Tokyo", "yyyyMM");
const today = new Date();
const thisMonth = Utilities.formatDate(today, "Asia/Tokyo", "yyyyMM");
if (lastUpdated != thisMonth) {
console.error(" ---------- 今月に作成したレポートではありません ---------- ");
return;
}
// Rename
const fileName = fileNamePrefixForSending + "_" + thisMonth + ".pdf";
reportFile.setName(fileName);
console.log(Utilities.formatString(" ---------- %s ---------- ", fileName));
// Send Email
const subject = subjectPrefix + "_" + thisMonth;
GmailApp.sendEmail(to, subject, body, { attachments: [reportFile] });
// Move to finished folder
const finishedFolder = DriveApp.getFolderById(folderIDFinished);
reportFile.moveTo(finishedFolder);
console.log(" ---------- 送信完了 ---------- ");
}
上記手順で実行環境が出来上がったので、あとはPDFを用意してレポートメール送信手順を実行するだけです。
備考
- 送信用フォルダに何も入っていないと実行時エラーになるショボい仕様ですが、気にしません
- 初めて動作確認するときはメール誤送信しないように
GmailApp.sendEmail()
の行はコメントアウトした方が手堅いです - 自分仕様(ファイルの更新日チェックなど)なので、あとはご自分の用途に合わせてカスタマイズして下さい
参考サイト
- Google Apps Script(GAS)とは?できることから始め方までの基本
- 初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
- ファイル添付したメールを自動で送るには?実はGoogle Apps Scriptで簡単にできるんです!
- GASでのメール送信についてまとめてみる
- Google Apps Script (GAS) で、GoogleDrive上の指定フォルダからファイル一覧を取得する
- Google Apps Script(GAS)の文字列で改行する方法~エスケープ文字を活用
- 【JavaScript】var / let / const を本気で使い分けてみた
- JavaScriptのシングルクォーテーションとダブルクォーテーション
- JavaScriptのログのレベリングについて