GASでスプレッドシートのリストからメールを作成する方法

GASでGmailの下書きを簡単に作成することができます。スプレットシートに宛名、CC、BCC、本文などを指定することが可能ですので、営業などの文章が決まっているメールを効率的に作成することが可能です。

スプレットシートの準備

まず、Googleスプレットシートを準備します。スプレットシートの詳しい説明はGoogle Apps Scriptのスクリプトエディタを開く方法の記事をお読みください。

スプレットシートを開いて、以下の表を作成します。「作成日」は下書きを作成した日が出力されます。「送信日」は送信した日を入力します。

シート名は「宛先」に変更してください。

1シート目(宛先)

次にシートを追加して、下の図のようにメールの内容を記載します。「CC」 「BCC」 はメールのCCとBCCに該当します。

こちらもシート名は「メール本文」に変更します。

記載する時のポイントは、各項目それぞれ一つのセルに記載することです。特に「本文」は長くなってしまうと思いますが、複数のセルにわたって記載してしまうとGASの処理が複雑になります。 また、各シートの各項目の記載位置やシート名についてですが、次の「メールの下書き作成」のGASのコードをそのまま使用される場合は、シートの例と同じ場所同じ名前にしてください。

2シート目(メール本文)の例

メールの下書き作成

では、スクリプトエディタを開いて、コードを書いていきます。

function gmailDraft() {
  const ss     = SpreadsheetApp.getActiveSpreadsheet()
  const SHEET  = ss.getSheetByName('宛先')
  let   data   = SHEET.getDataRange().getValues()
  const SHEET2  = ss.getSheetByName('メール本文')
  const data2   = SHEET2.getDataRange().getValues()
  const date    = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'M月d日')

  const subject   = data2[0][1]     //タイトル
  const sentence  = data2[2][1]     //本文
  const options   =  {
          "cc"    : data2[3][1],    //ccとbcc
          "bcc"   : data2[4][1]  
        }

  for (i in data) {
    if (i != 0) {           //見出しを避ける
      if (data[i][4] == '') {      //作成日が空白の場合メール作成
        const recipientCompany    = data[i][1]
        if   (data[i][2]          !=  '') {
              var   recipientName = data[i][2]
        }else{
              var   recipientName = "ご担当者"
        }
        const recipient           = data[i][3]
        const body     =  `${recipientCompany}\n${recipientName}様\n\n${sentence}`
        
        GmailApp.createDraft(recipient, subject, body, options)
        data[i][4]     =   date
      }
    }
  }
  SHEET.getDataRange().setValues(data)
}

最初に下記のコードでスプレットシートの1シート目(宛先)と2シート目(メール本文)に記載した情報全てを取得します。

  const ss     = SpreadsheetApp.getActiveSpreadsheet()
  const SHEET  = ss.getSheetByName('宛先')
  let   data   = SHEET.getDataRange().getValues()
  const SHEET2  = ss.getSheetByName('メール本文')
  const data2   = SHEET2.getDataRange().getValues()

そして、2シート目(メール本文)のメールのタイトル、本文を変数に代入します。

セルの指定方法は下記のように[行][列]の数字で指定します。例えばタイトルはB1のセルに記載しており、行は[1]、列は[2]となりそうですが、行列を0から数えて指定するため、タイトルの行は[0]、列は[1]となります。

  const subject   = data2[0][1]     //タイトル
  const sentence  = data2[2][1]     //本文

「CC」「BCC」はoptionsに設定します。 「CC」「BCC」 が固定で決まっている場合は下記のようにコードで直接指定することも可能です。

  const options   =  {
          "cc"    : "CC@Ⅰ.com",    
          "bcc"   : "BCC@Ⅱ.com"  
        }

メールの下書きを作成する条件として、「作成日」に日付が入っている場合はメールを作成しないようにしています。これは同じメールを重複して作成しないようにするためです。

また、メールの「本文」の頭に送信先の「会社名」「名前」を結合させます。その際スプレットシートの「名前」が空白の場合には「ご担当者様」とメールに記載するようにしています。

最後にGmailAppオブジェクトのcreateDraftメソッドを使用してメールの下書きを作成します。その際に、「作成日」に日付を出力します。

createDraftメソッド は以下のように使用します。オプションは省略することも可能です。

GmailApp.createDraft(メールアドレス , 件名 ,本文 , [オプション(CC,BCC)])

スプレットシートに「メール作成」のメニューを追加する

今のままだとスクリプトエディタを開かないとメールの下書き作成のGASが動きません。そこで下の図のようにスプレットシートのメニューバーに「メール作成」のメニューを追加し、スプレットシート上だけでメール作成ができるようにします。スプレットシートのタイトルは任意です。

メニューバーに「メール作成」を追加

スクリプトエディタに記載するコードは以下のようになります。

function onOpen(event) {
  var ui     = SpreadsheetApp.getUi()
  var menu   = ui.createMenu('メール作成')    //メニュー名を指定

  menu.addItem('メール下書き作成', 'gmailDraft') //メニューの項目を指定
  menu.addToUi() //スプレットシートに反映
}

onOpenを使用することで、スプレットシートを開いたときに自動でメニューバーを追加してくれます。メニューを追加する際は以下のメソッドを使用します。

getUi()UIを取得する。
createMenu()取得したUIにメニューを追加する。
addItem()メニューにアイテムを追加する。
ここで先ほど作成した「メールの下書き作成」の関数名を指定します。
addToUi()メニューを追加したUIをスプレットシートに反映する。

では、完成したものを実際に動かします。作成した「メール作成」メニューから「メール下書き作成」を選ぶと以下の承認画面が出てきます。

承認画面

「続行」を押して許可していきます。許可した後もう一度動かしてみると、ツールを動かした人のGmailに下のようなメールの下書きが作成されます。

作成された下書きメール
下書きメールの例

スプレットシートやスクリプトエディタの作成に多少時間は掛かりますが、このように一瞬でメールの下書きを何個も作成できるようになり、メール作成の時短に繋がります。

以上がGASを使用したメールの下書き作成の紹介になります。

ソースコードのダウンロード

下記からソースコード全体をダウンロードして頂けます。

    < 利用規約 >
    ダウンロードして頂いたソースコードなど(以下、「ダウンロードファイル」と呼ぶ)は無償で利用することができます。弊社は、ダウンロードファイルを利用されて生じた一切の損害について、その賠償義務を負いません。
    < 個人情報の取扱いについて >
    ご提供いただいた個人情報につきましては、下記の目的の範囲内で取り扱います。
    その他の取扱いについては当社のプライバシーポリシーに従います。

    ・お客さまの本人確認・与信管理
    ・当社のサービスまたは製品のご案内のため(電子メールによるものを含む)
    ・当社によるアンケート、各種セミナーのご案内、市場調査のため
    ・当社のサービス品質改善に向けた利用分析及び統計データ作成のため
    ・その他重要なご連絡のため