2014年3月9日日曜日

Google Apps Script - スプレッドシートで一斉送信メール

Gmail でメールの一斉送信をしようとしたときに、メールが届いた人もいれば届かなかった人もいたので、色々調べてみたら、Googleのスパム対策で一斉送信ができなくなっているみたいなので、Google Apps Script で一斉送信のコードを書いた。

メールを連続して大量に送るのが禁止されているなら、一定の間隔を空けて送信していけばいいと思い、調べてみたら、あった。

Utilities.sleep( );

( )内の引数は、数字で、単位はミリ秒なので、10秒間隔でメールを送信するならば、

Utilities.sleep(10000);

とすればOK。

スプレッドシートには、次のような欄を作った。
  • メールの件名
  • メールの本文
  • メールを送る人の名前(A4から、縦の列)  ← コードには関係ない
  • その隣に、送る人のメールアドレス(B4から、縦の列)
  • 名前とメールアドレスのリスト  ← ここから、送りたい人をコピペする





一斉送信メールのGoogle Apps Script:

function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [{name:"一斉メール送信", functionName: "updatesEmail"}];
  ss.addMenu("Mail",menuEntries);
}

function updatesEmail() {
  var ret = Browser.msgBox("メール送信しますか?", Browser.Buttons.OK_CANCEL);
  if (ret == "ok") {
    Browser.msgBox("メール送信!");
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var mail_to, subject, body;
    var lastRow = sheet.getRange("A:A").getValues().filter(String).length;
    var i = 0;
    while (i < lastRow - 4) {
      mail_to = sheet.getRange(i + 5, 2).getValue();
      subject = sheet.getRange(2, 3).getValue();
      body = sheet.getRange(2, 4).getValue();
      MailApp.sendEmail(mail_to, subject, body);
      i++;
      Utilities.sleep(10000);
    }
    Browser.msgBox("メールを送信しました!");
  }

  else {
    Browser.msgBox("送信をキャンセルしました…。");
  }
}


Google Apps Script はスクリプトの連続実行時間の制限が最高6分ほどらしいので、10秒間隔であれば、36人程度にしか送ることができません。

Triggerなどで、時間を設定して、5分毎にスクリプトを再び実行させれば、解決できそうです。

また、少なくとも何秒間隔だとエラーにならないのか、などの実験はしてないので、やってみた方は、是非、お教えください。

HTH, Peace.

0 件のコメント:

コメントを投稿