[GAS]Googleスプレッドシートのメールアドレスリストへメール一斉送信(添付ファイル対応版)

GAS

Google Apps Scriptで、Googleスプレッドシート上のメールアドレスと名前のリストへ、メールを個別に一斉送信するスクリプトを作成します。添付ファイルをアップロードできるようにもなっています。

困っている人

Googleドキュメントから差し込み印刷したPDFファイルを添付して、一斉にメール配信をしたいです。

シップ

GASで差し込み印刷したPDFファイルの印刷や一斉送信が行えますよ。

概要

Gmailから一斉送信するためのスクリプトです。スプレッドシートに記入されたメールアドレスと名前のリストから、宛先やあて名、個別メッセージをメールにセットして送信することができます。

また、テンプレートとなるGoogleドキュメントから、各宛先ごとに名前などを差し込んだPDFを作成し添付ファイルにすることも行えます。

メニューよりサイドバーにメール送信フォームを表示し、件名や本文、共通の添付ファイルを指定して送信が行えます。

共通添付ファイルは複数指定できます。事前にアップロードしておく必要はなくファイルダイアログから選択するだけです。

宛先に個別の添付ファイルを付けたい場合はフォルダにアップロードしておき、ファイル名を記入しておくことで別々のファイルを添付させることもできます。

これらはGoogle Apps Scriptを利用するため、すべて無料で実現できます。

必要なもの
  • 名前とメールアドレスをリスト化したGoogleスプレッドシート

アドレスリストの中の一部のアドレスだけに送信するためのグループと、送信フラグでの絞り込み機能も付いています。

ファイル添付やフォームを使用しないシンプルなメール一斉送信スクリプトで十分な場合はこちらをご覧ください。

このページで説明しているリストとコードを記入済みのサンプルスプレッドシートを用意しています。「ファイル」→「コピーを作成」をしてご自分のGoogle Driveにコピーしてお使いください。

Googleスプレッドシートで名前とメールアドレスのリストを用意

アドレスリストシート

A:送信フラグB:グループC:名前D:敬称E:メールアドレスF:個別メッセージG:追加1H:追加2I:添付ファイル
「1」の時送信絞り込みのグループ相手の名前「様」などの敬称メールアドレス個別メッセージ追加1追加2添付ファイル名
スプレッドシートの列

各列の意味

A列:送信フラグ

この列が半角数字の「1」の場合、その行のメールアドレスに送信が行われます。

B列:グループ

アドレスリストの中から送信するグループを絞り込むために使用します。例えば部署ごととか会社ごとなどに分けて送信したいときに使用します。

C列:名前

送信先の名称です。敬称が付け加えられたものを {name} で件名や本文中で使用できます。

D列:敬称

送信先の宛先に付与する敬称です。「様」「先生」、企業の場合は「御中」などです。

E列:メールアドレス

送信先メールアドレスです。

F列:個別メッセージ

同じ文面の中で、各宛先ごとに変えたい部分がある場合に使用できます。 {message} で件名や本文中で使用できます。

G列:追加メッセージ1

追加の個別メッセージです。{add1}で使用できます。

H列:追加メッセージ2

追加の個別メッセージです。{add2}で使用できます。

I列:添付ファイル

個別に異なるファイルを添付したい場合、添付ファイルフォルダにアップロードしたファイル名(またはファイルID)を記入します。(共通の添付ファイルの場合はこの列に記入しなくてもフォームから添付が行えます)

  1. 上記のようなGoogleスプレッドシートを作成します。
  2. 1列目は項目名を記入します。
  3. 2行目から実際のデータを記入していきます。

設定シート

「設定」というファイル名で設定項目をセットするシートを作成します。B1~B4のセルに各設定項目値を記入します。

A列:項目名B列:値
1行目添付ファイルフォルダID添付ファイルをアップロードしておくフォルダID
2行目テンプレートドキュメント差し込み印刷の元となるドキュメントのIDかURL、ファイル名
3行目送信者名メール送信者として表示される名前
4行目送信元メールアドレス送信元として使用されるメールアドレス

設定シート例

添付ファイルフォルダID

Googleドライブでフォルダを開いたとき、アドレスバーに表示される英数字から取得できます。

テンプレートドキュメント

差し込みでPDFを作成する際の元になるドキュメントです。IDかURL、ファイル名のいずれかを記入します。

送信者名

送信者名を指定しないとメールアドレスが送信者名として表示されますが、名前で表示したい場合は設定シートのB3に送信者名を記入してください。

指定すると受信者が誰からメールを受け取ったのかわかりやすくなります。

送信元メールアドレス

送信元メールアドレスは後ほど説明するスクリプト実行者のGmailアドレスとなりますが、Gmailの設定でメールエイリアスの設定がされている場合は、その別のアドレスに設定することができます。

設定シートのB4に送信元メールアドレスを記入してください。

他人のメールアドレスを名乗れないように、送信元メールアドレスに設定できるのは、Gmailでメールエイリアスの設定がなされているアドレスのみです。

メールエイリアスの追加はGmailの設定画面で「アカウントとインポート」タブを開き、
名前:の欄の「他のメール アドレスを追加」リンクから、送信元として使用したい別のメールアドレスを追加してください。

Googleスプレッドシートにスクリプトを追加

  1. メニューの「拡張機能」→「Apps Script」(ない場合は「ツール」→「スクリプトエディタ」)からApps Scriptを開きます。
  2. コード.gsを選択し(最初から選択されています)最初から入力されている内容は削除し、GitHubのコード.gsをコピペします。
  1. ファイルの追加(+ボタン)をクリックして、「HTML」を選択し、「mailform」という名前を付け、下記リンクから取得したコードに書き換えます。

「無題のプロジェクト」という名前をわかりやすい名前に変更し、「プロジェクトを保存」ボタンをクリックしてスクリプトを保存します。

スクリプトの実行

アクティブなシートに入力されているアドレスリストへ送信しますので、あらかじめ送りたいリストが記録されているシートを開いた状態で操作してください。

  1. Googleスプレッドシートを再読み込みします。
  2. メニューに「メール」が追加されているので、「メール」→「一斉送信」をクリックします。
  3. 初回の場合はスクリプトにGoogleアカウントへのアクセスを許可する操作を行います。

初回のアクセス許可

1.「承認が必要」のダイアログで「続行」をクリックします。

2.「アカウントの選択」で、送信元メールアドレスのGoogleアカウントを選択します。リストにない場合は「別のアカウントを使用」より送信元メールアドレスのGoogleアカウントでログインを行ってください。

3.「このアプリはGoogleで確認されていません」と表示が出るので、「詳細」をクリックし、「(先ほど指定したプロジェクト名)に移動」をクリックします。

4.「(プロジェクト名)がGoogleアカウントへのアクセスをリクエストしています」と表示されるので「許可」をクリックします。

5.許可が完了したら再度「メール」→「一斉送信」をクリックします。

6.サイドバーに「一斉送信」フォームが表示されるので、送信するグループにチェックを入れ、件名、本文、必要に応じて添付ファイルを指定して「メール送信」をクリックします。

グループで「全て」にチェックを入れた場合は、未記入も含めたすべてのグループが対象となります。

差し込みPDF作成

テンプレートドキュメントを元にして個別の内容を差し込んだPDFを作成し、ファイルIDを添付ファイルの列に記入できます。

作成したPDFファイルをメールに添付して送信することができます。

差し込み作成したPDFを送信するには①添付ファイル作成、②メール送信の2段階で行います

テンプレートドキュメントの用意

添付ファイルフォルダ内にGoogleドキュメントで元になるドキュメントを作成します。ファイル名や本文中でタグを使用すると、個別の内容に置き換えることができます。

作成したドキュメントのファイルID(またはURLやファイル名)を「設定」シートのB2セルへ記入します。

添付ファイル作成

メニューより「メール」→「添付ファイル作成」を実行します。添付ファイルフォルダにPDFが作成され、ファイルIDが添付ファイルの列に記入されます。

作成されたPDF

添付ファイルの列に入力されたファイルは個別に添付されます。

件名と本文中で使用できるタグ

件名や本文中に下記のタグがある場合、それぞれ置き換わって送信されます。

タグ置換対象
{name}名前+敬称(C列+D列)
{message}個別メッセージ(F列の内容。それぞれのアドレスごとに変えたい文言がある場合)
{add1}追加個別メッセージ(G列の内容)
{add2}追加個別メッセージ(H列の内容)

実行時に表示されるメッセージ

〇件のメールを送信しました。本日残り〇件送信可能です。

メール送信が完了した際に表示されます。実際に送信したメール内容はGmailを開いて送信済みフォルダから確認できます。

エラーメッセージが表示される場合

送信元メールアドレス〇〇はメールエイリアスとして設定されていません。

指定した送信元メールアドレスがメールエイリアスとして設定されていない場合に表示されます。スクリプトを実行しているGoogleアカウントのGmailのメールエイリアスに、送信元メールアドレスを追加してください。

次のメールアドレスが正しくありません:メールアドレス

送信先リストに含まれるメールアドレスの形式が正しくない場合に表示されます。リストの中のメールアドレスをご確認ください。

一日の送信可能数を超えるため送信できません。本日残り可能送信数:〇〇

GASからのGmail送信には、アカウントごとに1日当たり100通までという制限があります。そのため、送信しようとしているメールの通数が、その日の残り可能送信数を超えている場合は1通も送信せずこのメッセージが表示されます。

送信対象が残り可能送信数以下になるように調整してから再度送信を行ってください。対象が100を超える場合は最初から送信できないため、100以内にしてからお試しください。

送信先がありません。

エラーでメール送信が一件もできなかった場合や、シート中に有効な送信先メールアドレスがない場合に表示されます。

  • A列の送信フラグが「1」の行がない(半角数字)
  • B列のグループが未記入もしくは、選択されたグループに属するリストが存在しない

Exception: 無効なメール:

メールアドレスがRFC 5321に準拠していない形式の場合Gmailでは送信できません。

宛先欄(To:)の敬称

宛名欄(いわゆるTo:)は「名前 <メールアドレス>」の形で送信されますが、「名前+敬称 <メールアドレス>」やメールアドレスのみに変更することができます。

スクリプトの120行目付近にある下記の行を変更することでTo:欄を変更できます。

to: selectedRow[i][getUserSheetIndex("name")] + " <" + userData["mail"] + ">",

宛先の名前 <メールアドレス>

デフォルトでこの形で送信されます。

メールアドレスのみにする

to: userData["mail"],

名前+敬称 <メールアドレス> の形にする

例えば「様」をつけたい場合は次のようにします。

to: userData["name"]+" <"+userData["mail"]+">",

使用技術

  • Google Apps Script
  • Vue.JS
  • tailwindcss

その他

使い方や設定方法が分からない場合などはお問い合わせください。カスタマイズが必要な場合もお問い合わせください。お見積りさせていただきます。

この記事を書いた人

PHPが好物な個人開発プログラマ。フリーランスエンジニアとしてWebサービス作ったりしてます。15年の経験を生かしてMENTAでメンターもやってます。WordPressやPHPでお困りのことがあればご相談に乗りますのでDMください。

Follow on SNS
GAS
SOHO MIND

Comments

  1. まっしー より:

    はじめました!すてきなスクリプトありがとうございます。

    実行後、①添付ファイル作成機能は正常に動くのですが、②メール送信がうまくいきません。
    具体的には、一斉送信ウインドウからメール送信を押すと、ぐるぐる回って動作が止まってしまいます。

    • ship より:

      はじめまして。
      その場合、メール送信時に何らかのエラーが出ている可能性が高いですので
      GASの実行ログを確認なさっていただければと思います。