LoginSignup
1
3

More than 3 years have passed since last update.

Google Apps Script (GAS) で、レポートメールの自動送信(メール誤送信防止策)

Posted at

前回に続いて、またまたバッチシリーズです。

セキュリティ事故の大半はメール誤送信と言われ続けながらも、月一のレポートはPDFにしてメールで送らなければいけない私。
定型のレポートメールを送るたびに誤送信を恐れるぐらいなら、バッチにして早く、安全、確実に自動送信してしまいましょう。

ということで、レポートメールの自動送信バッチを作ったので紹介します。

※初めてのGASなので間違いがあればご指摘頂けると幸いです。

前提

  • Gmail, Google ドライブ を利用
    • もちろんGoogleアカウントが必要
  • バッチは Google Apps Script で作成
  • レポート内容は月末に PDF でメールに添付
    • PDF は当月中(月末)に作成する
    • PDF は Google ドライブ に配置
  • メール内容は固定
    • 送信先とメール本文は固定
    • 件名と添付ファイル名の末尾には年月を入れる

レポートメール送信手順

  1. レポートをPDFで作成
  2. Google ドライブ の送信用フォルダにPDFをコピー
  3. Google Apps Script でスクリプトを実行
  4. メール送信が完了したら、レポートファイルが送信済みフォルダに移動されていることを確認
  5. 念のために Gmail で送信済みメールを確認

毎月の定型作業がたったこれだけで(早く、安全、確実に)終わるのですから、楽ちんですね。

備考

  • 送信用フォルダにコピーするファイル名はスクリプトでリネームするので、名前は何でも構いません
  • 【注意】送信用フォルダに配置するファイルは一つだけにしてください
  • 最初のスクリプト実行時には許可を求められるので「許可を確認」を選択してください

スクリプト作成手順

  1. Google ドライブ に送信用フォルダと完了用フォルダを作成
    • 送信用:ex) "01_Ready_For_Sending_Report"
    • 完了用:ex) "02_Finished_Sending_Report"
    • フォルダ名は何でも構いません(後から変更しても大丈夫です)
  2. 上記のフォルダIDを取得(あとでScriptに貼り付けます)
  3. 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() の行はコメントアウトした方が手堅いです
  • 自分仕様(ファイルの更新日チェックなど)なので、あとはご自分の用途に合わせてカスタマイズして下さい

参考サイト

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3