0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

スプレッドシートの名簿で個々にGmailを送る GAS

Last updated at Posted at 2020-02-28

名簿に記載されている方の個人別にメールを送りたい

 Google Spreadsheet に名前とメールアドレスなどがまとめてある場合、Bcc:などで一斉メールを送ることもできますが、本文中にお名前を入れて個々に送りたい時がありますね。
 コピペするのも手ですが、せっかくなので Google Apps Script で自動化できると嬉しいと思ってスクリプトを書いていましたが、今回それを使おうとしたら、「このプロジェクトは Chrome V8 を搭載した新しい Apps Script ランタイムで実行しています。」というメッセージが出ていて、動作しませんでした。困った!

 そこで、Chrome V8について調べると、
https://developers.google.com/apps-script/guides/v8-runtime
に説明があったので、この際、V8対応で書いてみました。

準備するもの

Google Document ファイル

メールの本文となるテキストを書いておきます。
氏名など置き換え用に {宛先名} などのキーワードを書いておきます。
またドキュメント名を Subject: に使用するようにしました。

Google Spreadsheet

 送信相手の名前とメールアドレスなどが入っているもの。
 1行目はタイトル行として無視しています。
列番号はA列が[0],B列が[1] のようになります。

ソース

 onOpen でスプレッドシートにメニューが追加されますので、メニューの「メール送信」から「リストからメール送信」を選ぶと行ごとにメールを編集して送信します。

sendEmail.js
function onOpen() {
  var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
  ui.createMenu('メール送信')
      .addItem('リストからメール送信', 'menu.item1')
      .addToUi()
}

var menu = {
  item1: function() {
    sendEmail();
  }
}  

function sendEmail() {
  // Googleドキュメントからメールの件名と本文を取得
  var doc = DocumentApp.openById('<ドキュメントのID>');
  var subject = doc.getName();    // ドキュメント名を subject とする
  var text = doc.getBody().getText();

  // Googleスプレッドシートからデータ取得
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getActiveSheet();
  var range = sheet.getDataRange();
  var rangeValues = range.getValues();

  for(var i = 1; i < rangeValues.length; i++) {   // 1行目[0]は対象外としている
    // メール本文の置き換えとメール送信の処理
    var name = rangeValues[i][1];    	// 本文の置き換え用氏名のカラム
    var email = rangeValues[i][2];      // 送信先メールアドレスのカラム
    var replacedText = text.replace('{申込者名}', name);
//  送信前の確認処理(不要なら if文まで削除)
    var ui = SpreadsheetApp.getUi();
    var result = ui.alert(
      '送信の確認(Press OK to SendEmail)',
      (name + '\n' + email + '\n' + replacedText),
      ui.ButtonSet.YES_NO);
    if (result == ui.Button.YES) {
      GmailApp.sendEmail(
        email,
        subject,
        replacedText,
        {
          from: '<送信元メールアドレス>',
          cc: '<Cc:のメールアドレス>',
          noReply: false,
          replyTo: ''
        }
      );
    }
  }
}

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?