👏

Google App Scriptを使った自動送信メールツールを作成する

2021/03/01に公開

Google App Script(GAS)を使って登録したメールアドレスに一斉送信するツールを開発します。

使用するものは下記
・Google App Script(GAS)
・スプレッドシート
・Google ドキュメント
・Google ドライブ(画像用)

作成手順

1、Googleのマイドライブ、または共有ドライブに新規プロジェクトを作成

プロジェクトとして一つのファイルにドキュメントやスプレッドシートを管理しておくことをおすすめします。

構成

マイドライブ
 メールツール
  スプレッドシート
  ドキュメント
  画像用フォルダ

2、ドキュメントを作成します。

ドキュメントに送りたいメール文を作成します。
{宛先}、{名前}、{画像1}としているところは
これから設定するスプレッドシートの値に変更されます。
(見やすくするため赤文字にしていますが、メール文は黒字で反映されます。)

"<br>"は改行を反映します。

3、画像フォルダを作成

使用する画像をフォルダにアップロードします。

4、スプレッドシートを作成

スプレッドシートを作成し、下記のように記述します。

A列
メールの件名が入ります。

B列
宛先(相手のお名前)が入ります。

C列
送信先のメールアドレスが入ります。

D列
名前が入ります。

5、スクリプトを作成

スプレッドシートの「ツール」から「スクリプトエディタ」を選択

スクリプトファイルを開くとこのようになっています。
ここにスクリプトを記述していきます。

function sendMail01(){

 // 間違えて押した時にキャンセルできるようにアラートを出す
 let confirm = Browser.msgBox("メール一斉送信","本当に送信してもよろしいですか?", Browser.Buttons.OK_CANCEL)
 // キャンセルが押されたら、操作を中止する
 if (confirm == "cancel") {
   Browser.msgBox("一斉送信をキャンセルしました")
   return false;
 }
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const DOC_URL = 'https://docs.google.com/document/d/[ドキュメントID]/edit';
const doc = DocumentApp.openByUrl(DOC_URL);
const docText = doc.getBody().getText();

 //スプレッドシートの情報を取得
 for(let i = 2; i <= lastRow; i++){
   const subject = sheet.getRange(i, 1).getValue(); //件名
   const address = sheet.getRange(i, 2).getValue(); //宛先
   const recipient = sheet.getRange(i, 3).getValue(); //送信先メールアドレス
   const Name = sheet.getRange(i, 4).getValue(); //名前

   //ドライブから画像データを取得
   const folder = DriveApp.getFolderById('[画像フォルダID]');
   let driveImage = DriveApp.getFilesByName('img01_'+ 1 +'.png').next();
   let img1 = driveImage1.getBlob();

   //ドキュメントのテキストを置き換える
   const body = docText
   .replace('{宛先}',address)
   .replace('{名前}',Name)
   .replace('{画像1}','<img src="cid:img1">');

     MailApp.sendEmail({
       to: recipient,
       subject: subject,
       body: body,
       htmlBody: body,
       inlineImages:{
       img1:img1,
     }
   });
 }
}

説明

function sendMail01(){}

関数名をsendMail01としています。

// 間違えて押した時にキャンセルできるようにアラートを出す
 let confirm = Browser.msgBox("メール一斉送信","本当に送信してもよろしいですか?", Browser.Buttons.OK_CANCEL)
 // キャンセルが押されたら、操作を中止する
 if (confirm == "cancel") {
   Browser.msgBox("一斉送信をキャンセルしました")
   return false;
 }

送信ボタンを間違えて押しても良いように確認アラートを出します。
(後ほど、スプレッドシートに送信ボタンを追加します)

const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const DOC_URL = 'https://docs.google.com/document/d/[ドキュメントID]/edit';
const doc = DocumentApp.openByUrl(DOC_URL);
const docText = doc.getBody().getText();

Google ドキュメントの取得をします。

[ドキュメントID]の部分にはGoogle ドキュメントのURLから
下記赤枠の部分を入力してください。(~/d/[ドキュメントID]/edit)

for(let i = 2; i <= lastRow; i++){
   const subject = sheet.getRange(i, 1).getValue(); //件名
   const address = sheet.getRange(i, 2).getValue(); //宛先
   const recipient = sheet.getRange(i, 3).getValue(); //送信先メールアドレス
   const Name = sheet.getRange(i, 4).getValue(); //名前

スプレッドシートの値を取得します。

const folder = DriveApp.getFolderById('[画像フォルダID]');
   let driveImage = DriveApp.getFilesByName('img01_'+ 1 +'.png').next();
   let img1 = driveImage1.getBlob();

画像ファルダに入れた画像を取得します。

[画像フォルダID]の部分には画像フォルダURLから
下記赤枠の部分を入力してください。(~/folders/[画像フォルダID])

const body = docText
   .replace('{宛先}',address)
   .replace('{名前}',Name)
   .replace('{画像1}','<img src="cid:img1">'); 

ドキュメントに記載した{宛先}、{名前}、{画像1}を
スプレッドシートの入力方法やスクリプトで取得した画像情報と入れ替えています。

MailApp.sendEmail({
       to: recipient,
       subject: subject,
       body: body,
       htmlBody: body,
       inlineImages:{
       img1:img1,
     }
   });

メール送信を行うスクリプトを記載しています。
"to:" にはスプレッドシートに記載した送信先が入ります
"subject:"にはスプレッドシートに記載した件名が入ります
"htmlBody:"にはドキュメントに記載した文章が本文として入ります
"inlineImages"には取得した画像が入ります

これでスクリプトを保存します。

6、スプレッドシートに送信ボタンを追加します。

スプレッドシート「挿入」から「図形描画」を選択

ボタンを作成し、「保存して終了」を選択。

するとこのように表示されます。
位置は右クリックでできるようになります。

右クリックで三つ並んでいる点をクリック、
「スクリプトを割り当て」を選択

関数名sendMail01を入力し、OK

これで送信ボタンを押すと送信されるようになります。
最初の送信時はドライブに対する承認の許可を求められます。
全て許可するようにしてください。

複数人にメールを送信したい場合は下記のようにスプレッドシートに記載していきます。

以上となります。

Discussion