GooleスプレッドシヌトずGmailを連携しお、予め登録しおおいたアドレスにメヌルを䞀斉送信するスクリプトを䜜成したしょう。

Gmailで䞀斉送信する

GmailAppでは、簡単にメヌルを送信するこずができたした。これは、自分自身に情報を知らせるような堎合だけでなく、本栌的なメヌルの自動送信にも利甚できたす。䟋えば、簡単な耇数アドレスに送信するスクリプトを䜜っおみたしょう。配列send_dataには、それぞれで送信するメヌルアドレスを配列にたずめたものを甚意しおおきたす。


// address data.
var send_data = [
  'syoda@tuyano.com',
    メヌルアドレスを甚意  
];

function sendMails(){
  var title = 'sample mail';
  var content = 'this is test mail.';
  send_data.forEach(function(val){
    GmailApp.sendEmail(val, title, content);
  });
}
  • 送信されたメヌルのサンプル

これを実行するず、配列send_dataに甚意したすべおのメヌルアドレスにメヌルを送信したす。倧勢に簡単にメヌルを送るこずができるんですね。

もっず倧勢に送るには

このやり方はずおも簡単に耇数の人にメヌルを送れるのですが、ちょっずした問題も発生したす。

1぀は、「たくさんの送信メヌルがたたるこず」です。1人1人に察しGmailからメヌルを送るので、Gmailの送信枈みメヌルには送った数だけ同じメヌルがずらっず䞊ぶこずになりたす。もう少し敎理しおおきたいものですね。

これは、1人1人にメヌルを送るのでなく、bccでたずめお送るこずで解決したす。bccを䜿えば、1通のメヌルを送るだけで倧勢に送信できたす。

もう1぀の問題は、こっちがもっず深刻なのですが、「Google Apps Scriptでは、1日に送信できるメヌル数に限床がある」ずいう点です。G-Suiteの契玄をしおいる堎合は最倧2000通たで送れるのですが、そうでない普通のGoogleアカりントの堎合、1日最倧100通たでしか送れないのです。

この問題を完党に解決する方法はないのですが、匷いおあげるなら「䜕日かに分けお送る」ずいうこずしかないでしょう。Googleスプレッドシヌトを䜿えば、倧勢のメヌルアドレスを100個ず぀分けお敎理するのも比范的簡単です。スプレッドシヌトず連携しお、その日に送るアドレスをピックアップしお送信するようなシステムを考えれば、100通の壁を突砎できる  かも知れたせん。

毎日100通ず぀送信する

ずいうわけで、Googleスプレッドシヌトを䜿い、「毎日100通ず぀メヌルを送信するスクリプト」を䜜っおみたしょう。

たず、スプレッドシヌト偎にデヌタを甚意したしょう。ここでは、䞀番巊偎の「A」列にメヌルの内容を甚意したす。1行目にタむトル、2行目以降にテキストを1行ず぀曞いおいきたしょう。

そしお送信するメヌルアドレスは、「B」列以降に甚意したす。「B」の1100行に100個のメヌルアドレスを、続いお「C」列の1100行に100個のアドレスを、曎に「D」列の1100行に  ずいう具合に、B以降に最倧100個ず぀メヌルアドレスを蚘述しおいきたすもっず少なくおも構いたせん。

  • A列にタむトルず本文を、B列以降にメヌルアドレスを最倧100個ず぀曞いおいく

プロパティの甚意

続いお、Googleスプレッドシヌトの「デヌタ」メニュヌから「スクリプト゚ディタ」を遞び、スクリプト゚ディタを開いお䞋さい。そしお、「ファむル」メニュヌの「プロゞェクトのプロパティ」を遞び、プロパティのダむアログを呌び出したす。そこにある「スクリプトのプロパティ」を遞択しお䞋さい。これは、スクリプトに保管しおおけるプロパティです。スクリプトが終了した埌も倀を保持するこずができたす。

ここにある「行を远加」をクリックし、新しいプロパティを甚意したす。そしお名前を「lastColumn」、倀を「2」に蚭定しお保存したす。

  • lastColumnずいうスクリプトプロパティを甚意する

埌はスクリプトを蚘述するだけです。以䞋のようにスクリプト゚ディタに远蚘をしお䞋さい。


function sendMails(){
  var props = PropertiesService.getScriptProperties();
  if (last_col > sheet.getLastColumn()){
    return;
  }
  var last_col = props.getProperty('lastColumn') * 1;
  var address = 'syoda@tuyano.com';
  var sheet = SpreadsheetApp.getActiveSheet();
  var last = sheet.getLastRow();
  var title = sheet.getRange(1, 1).getValue();
  var content = '';
  for(var i = 2;i <= last;i++){
    var val = sheet.getRange(i, 1).getValue();
    if (val !=''){
      content += sheet.getRange(i, 1).getValue() + '\n\n';
    } else {
      break;
    }
  }
  var mails = sheet.getRange(1, last_col, last).getValues().join(',');
  GmailApp.sendEmail(address, title, content,{bcc:mails});
  props.setProperty('lastColumn', last_col + 1);
}

これは、実行するずたず「B」列のメヌルアドレスを1぀にたずめ、bccでメヌルを送信したす。再床実行するず、今床は「C」列のメヌルアドレスにメヌルを送りたす。曎に実行するず「D」列に  ずいう具合に、実行するごずにB、C、D  ず1列ず぀移動しおメヌルアドレスを取り出し送信したす。そしおいちばん最埌の列たで送ったら、埌はもう送信したせん。

このスクリプトを、1日に1床実行するようにトリガヌを蚭定すればいいでしょう。「線集」メニュヌから「珟圚のプロゞェクトのトリガヌ」を遞び、トリガヌ線集画面を呌び出したす。そしお、「トリガヌを远加」ボタンをクリックし、珟れたダむアログで以䞋のように蚭定をしたす。

実行する関数を遞択――sendMails
実行するデプロむを遞択――Head
むベントの゜ヌスを遞択――時間䞻導型
時間ベヌスのトリガヌのタむプを遞択――日付ベヌスのタむマヌ
時刻を遞択――垌望の時間垯を遞ぶ

  • トリガヌで1日1回、スクリプトを実行させる

これで、1日1回、スクリプトが実行されるようになり、毎日100通ず぀メヌルが送られるようになりたす。最埌たで送信されるず、もうメヌルは送られたせん。新たにメヌルを甚意しお送信を開始する堎合は、スクリプトプロパティ「lastColumn」の倀を「2」に戻しおおきたす。これで、たた「B」列から送信を開始したす。

メニュヌでプロパティを再蚭定する

このlastColumnスクリプトプロパティの操䜜たでもっず簡単に行えるようにできるず曎に䟿利ですね。メヌル送信の動䜜が確認できたら、以䞋のようなスクリプトを远加しおみたしょう。


function onOpen(e){
  SpreadsheetApp.getUi()
  .createMenu("Gmail")
  .addItem("リセット", "resetProperty")
  .addToUi();
}

function resetProperty(){
  PropertiesService.getScriptProperties().setProperty('lastColumn', '2');
  SpreadsheetApp.getUi().alert('メヌル送信を開始したす。');
}
  • 「Gmail」メニュヌから「リセット」を遞ぶず、メヌル送信を最初から開始する

スプレッドシヌトを開くず、「Gmail」ずいうメニュヌが远加されたす。ここから「リセット」を遞べば、最初の「B」列からメヌル送信をスタヌトしたす。新しいメヌルを送信するずきは、「A」列のメヌル内容を曞き換え、「リセット」メニュヌを遞べばいい、ずいうわけです。これでだいぶ䜿いやすくなりたした