Gメールで一人ひとりに違う情報を差し込んで送信する方法|スプレッドシートとドキュメントとスクリプト

この度、わけあって300名ほどの人たちに個別にIDとパスワードを送らなければいけなくなりました。会員用サイトのログインIDとパスワードです。一人ひとりユニークに割り振られています。さすがに一人ずつメールを送るには効率が悪すぎますし、ヒューマンエラーも起こりそうです。

より効率的にかつ間違いなくメールでIDとパスワードを知らせる方法を模索していました。良く調べてみたら、実はGmailとスプレッドシートとドキュメントの組み合わせで本文に任意の情報を差し込みながら、一人ひとりにメールが送信できるという事がわかりました。

その時の備忘録になります。

 

Gmailで差し込みメールを送る方法

1:スプレッドシートを作成

まずは、スプレッドシートを新規に作成します。スプレッドシートの名前は特にプログラム上は関係ないのでわかりやすい名前で問題ありません。

今回はIDとパスワードをメールで連絡したいので、

  • email
  • name
  • id
  • password

の4項目(列)を作成して、テスト用の値を入力しました。

 

2:本文用のドキュメントを作成

続けて、ドキュメントを新規に作成します。こちらも名前は何でも大丈夫です。

ここで作成したドキュメントがメールの本分となります。今回の内容はこんな感じでとてもシンプルです。

 

 

{}でくくった個所が自動的に置換されて送信されるシステムです。

自動で置換される項目は次の3つです。

{name}

{id}

{password}

 

 

3:スクリプトを作成

そしてスクリプトを作成します。スクリプトの内容についてはコードにコメントが入っていますので、確認してください。状況に応じて皆さんの環境に合わせて使ってください。(この記事の一番下にコードを載せておきます)

赤の四角の箇所には、ドキュメントのIDが入ります。ドキュメントのIDはドキュメントのアドレスバーに表示されています。

「docs.google.com/document/d/ここがIDです/edit」となっています。

 

 

ここまで出来たら、あとは実行ボタンを押せば送信できます。

 

 

初回実行時には認証が入りますが、そのまま許可して下さい。

 

 

メールを送信するアカウントで認証してください。

 

許可をしてください。

 

テストで届いたメールがこちら

 

ちゃんと、ドキュメント通りになっていて、カッコ{}の箇所も置換されています。

誰でも使える仕組みにする

今回のもう一つの目的は、私以外の社員の方々(プログラムなどがまったくわからない方々)が使えるようにする事です。誰でも使えるようにしておかないと、毎回自分がやらないといけなくなりますので。

 

なので、毎回「スクリプトを開いて実行ボタンを押す」というのは、あまりよろしくありません。わかりにくいだけじゃなくて、コード画面を見ることを嫌がる(わかりにくいと感じる)方もいるでしょうし、もしも間違えてコードをいじってしまったりしたら色々と面倒です。

 

誰でも実行できる仕組みにする方法として2種類あります。

  • VBA(Excel)のようにシート上にボタンを配置する方法
  • スクリプトを実行するメニューを追加する方法

一つずつ確認してみます。

EXCELのようにボタンを配置する方法

まずは、EXCELのように図形を配置してボタンにする方法から。

メニューの挿入→図形から適当な図形を作成して挿入します。

とりあえず今回はこんな赤丸の実行ボタンを配置してみました。

 

図形を右クリックすると3つの点が表示されるので、その点の箇所をクリックします。

 

するとメニューがでてきますので、スクリプトを割り当てを選びます。

 

その後、どのスクリプトを割り当てますか?と聞かれるので、スクリプト名を記入します。

 

スクリプト名はコード内の先頭の「function myFunction() {」の部分になりますので、今回であれば「myFunction」になります。

実行ボタンを押すと、スクリプトが無事に実行されました。

 

スクリプト実行メニューを追加する方法

次に、メニューに追加する方法も確認します。完成形はこんな感じで、一番右(ヘルプの隣)に新しくメニューを追加します。

 

メニューに追加する方法は、先ほどのスクリプトの先頭に下記のコードを追記します。

以上です。

どっちにしようかと迷ったのですが、実行ボタンですと間違って削除されてしまいそうな気もしたので、今回はメニューに追加する方法を選択しました。

今回使用したコード

最後に今回使用したスクリプトのコードを記載しておきます。よろしければ参考までに下記よりどうぞ。

 

// メニューに追加
function onOpen() {
var ui = SpreadsheetApp.getUi();
menu.addItem(‘一斉メールを送信します’, ‘myFunction’);
menu.addToUi();
}

function myFunction() {

var mySheet=SpreadsheetApp.getActiveSheet(); //アクティブシートを取得
var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得


var docTest=DocumentApp.openById(“17***6X*****o1P****HY5o-****_XBottH*****v2mgQ”); //ドキュメントをIDで取得
var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得


for(var i=2;i<=rowSheet;i++){
var strEmail=mySheet.getRange(i,1).getValue(); //email
var strName=mySheet.getRange(i,2).getValue(); //name
var strId=mySheet.getRange(i,3).getValue(); //id
var strPass=mySheet.getRange(i,4).getValue(); //password
var strBody=strDoc.replace(/{id}/g,strId).replace(/{password}/g,strPass).replace(/{name}/g,strName);//取得した値を置換


var strSubject = strName +”さんのIDとパスワード”; //メールタイトル
var strFrom=”****@gmail.com”; //Fromアドレス
var strSender=”〇〇〇〇”; //差出人


GmailApp.sendEmail(
strEmail, //toアドレス strSubject, //メールタイトル
strBody, //本文
{
from: strFrom, //fromアドレス
name: strSender //差出人 }
);
}
}