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個ずつメールアドレスを記述していきます(もっと少なくても構いません)。
プロパティの用意
続いて、Googleスプレッドシートの「データ」メニューから「スクリプトエディタ」を選び、スクリプトエディタを開いて下さい。そして、「ファイル」メニューの「プロジェクトのプロパティ」を選び、プロパティのダイアログを呼び出します。そこにある「スクリプトのプロパティ」を選択して下さい。これは、スクリプトに保管しておけるプロパティです。スクリプトが終了した後も値を保持することができます。
ここにある「行を追加」をクリックし、新しいプロパティを用意します。そして名前を「lastColumn」、値を「2」に設定して保存します。
後はスクリプトを記述するだけです。以下のようにスクリプトエディタに追記をして下さい。
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回、スクリプトが実行されるようになり、毎日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」というメニューが追加されます。ここから「リセット」を選べば、最初の「B」列からメール送信をスタートします。新しいメールを送信するときは、「A」列のメール内容を書き換え、「リセット」メニューを選べばいい、というわけです。これでだいぶ使いやすくなりました!