takeda_san’s blog

KotlinとVRを頑張っていく方向。

GASでオレオレメールテンプレートエンジンを作ろう

きっかけ

バックオフィスの業務を教えてもらっていると、

  1. 何らかのテンプレのエクセル(請求書なり納品書なり)を作って
  2. メールで取引先に送る

というパターンを取引先分数十件やるというものが、部署に限らずいくつかありました。
他社とのやりとりにはメールという共通プロトコルが便利なので、気持ちはよくわかる。

業務内容を聞くだけ聞いて、なるほどぉ、そんな業務があるんですね。大変だなぁ・・・
とだけ言って立ち去るわけにはいきませんね。
業務の担当者は、毎回大変な思いをしているわけです。

  • メールの宛先と送付内容の整合性チェック
  • 単純繰り返し作業

聞いただけで憂鬱な作業ですね。

とはいえ、UIつくって送付先マスタをつくって、テンプレートエンジンを使った埋め込みとメール送信の仕組みを・・・
おっと、人に紐づかないシステム用のメールアドレスを発行してもらわなきゃな・・・!
なんてことをしている開発期間は、ないでしょう。ないことが多いんじゃないかな?

餅は餅屋、GmailにはGASが一番楽でございます。
サクッと作ってみましょう。
(唐突だけど今回はGoogleのアカウントまたは、G Suiteを前提にするよ!)

しくみ

こんな感じの宛先と差し込み文言の一覧をスプレッドシートで作ってもらって・・・

f:id:takeda_san:20200526013610p:plain

メールのテンプレートも作ってもらいましょう。

f:id:takeda_san:20200526013639p:plain

察しの良い方は、お気づきかと思いますが ${}のところが差し変わります。
あとは、スクリプトをちょろっと実行するとあら不思議。
メールがよろしく下書きにあるではないですか。

f:id:takeda_san:20200526013759p:plain

ここから文面確認して、送信してもらえばOK。
送信までやってもいいのですが、事前に文面確認したいとか、ちょっと手直ししたいという要望が多いのでね。
下書きにあえてためております。

コード

こんな感じです。 このあとは差し替えのところをヘッダの名称と合わせて動的に取得するもよし、
Cc、Bccも設定できるようにするもよし様々な工夫が考えられますね。

しかし、コードが魔界になるまえに良きSaaSアプリでも見つけて移行しましょうね。
そんなに機能もりもりになるまで使いたおしてもらえるなら、お金はらってよいアプリケーション使ったほうが良さそうです。
(作成者がわからない謎マクロを眺める毎日…ゲッソリ)

function createMail() {
  const spreadsheet = SpreadsheetApp.getActive()
  
  const masterSheet = spreadsheet.getSheetByName("マスタ")
  const templateSheet = spreadsheet.getSheetByName("テンプレ")
  
  // メール作成処理件数(マスタの行数)
  const rowCount = masterSheet.getLastRow()
  
  for(let i = 2;i <= rowCount;i++) {
    let template = templateSheet.getRange(1, 1).getValue()
    
    // メール下書き作成
    GmailApp.createDraft(
      masterSheet.getRange(i, 1).getValue(),
      "【重要】例の件でございます",
      template.replace("${宛名}", masterSheet.getRange(i, 2).getValue(), "g")
    )
  }
  
  Browser.msgBox("メールの下書きを作成しました", Browser.Buttons.OK)
}

次回、メール添付機能を追加しよう編 に続くとか続かないとか。