GASで簡易的な自動送信メルマガを作る
目的
指定した時間に自動的に送信される簡易的なメールマガジンをGASで実装します。
エンジニア以外のメンバーに運用してもらうため、スプレッドシート上に内容を記入してもらう形にしています。
概要
スプレッドシート上に以下の項目を記入しておくと、指定した内容でメールが送信されます。
- 送信日/時間
- 宛先(to,cc,bcc)
- タイトル
- 本文(定型文)
- 本文(都度変更文)
今回の例では宛先に英語圏と中国語圏を含み、本文(都度変更文)としてそれぞれの言語のメッセージボックスを用意しておき、必要に応じて挨拶を記入してもらいます。
事前準備
スプレッドシートに必要な入力項目を用意する
概要で記した通りです。日付部分や宛先部分は条件付き書式や入力制限を使ってバリデーションします。
moment.js
日付を扱うためのライブラリです。文字列からパースしたり、月末月初を求める演算ができたり、任意のフォーマットで出力できたり、と様々な機能があります。指定した時間にメールを送る処理を調べていて知り、使ってみました。
ライブラリ追加
デフォルトだと利用できないので、ライブラリの追加を行います。リソースタブからライブラリを選択します。
「Add a library」部分にMHMchiX6c1bwSqGM1PZiW_PxhMjh3Sh48
を指定して「追加」を選択します。
するとMomentが表示されますので、最新バージョンを指定して追加します。
これでmoment.jsを使えるようになりました。
実装
事前準備で作成したスプレッドシートのツール
タブからスクリプトエディタ
を選び、以下の通り貼り付けます。
sh.getRange
で取得している値はスプレッドシート上の項目の場所を参照しているので、ご利用の際は用途に応じて適当に変更してご利用ください。
function sendMail() {
var SS_ID = "スプレッドシートID";
var TARGET_SHEET_MAIL = "シート名";
var sh = SpreadsheetApp.openById(SS_ID).getSheetByName(TARGET_SHEET_MAIL);
var range = sh.getRange('B:B').getValues();
var lastRow = range.filter(String).length;
var toAdr = [];
var ccAdr = [];
var bccAdr = [];
var title = sh.getRange("L11").getValue();
var body = sh.getRange("L12").getValue();
var EnglishGreeting = sh.getRange("L3").getValue();
var ChineseGreeting = sh.getRange("L4").getValue();
var deliveryDateTime = "";
var moment = Moment.moment();
//メール本文の置き換え
body = body.replace("ChineseGreeting",ChineseGreeting);
body = body.replace("EnglishGreeting",EnglishGreeting);
//当月確認
for(i=1; i<=lastRow; i++){
var deliveryValue = sh.getRange(i + 3,2).getValue();
var Month = new Date().getMonth() + 1 + "月";
if (moment.isSame(deliveryValue[i],'hour')) {
body = body.replace("Month",Month); //本文中に記載した月の書き換え
}
}
//メール宛先振り分け
for(i=1; i<=lastRow; i++){
var sendToValue = sh.getRange(i + 3,7).getValue()
if (sendToValue == "to") {
toAdr.push(sh.getRange(i + 3,9).getValue());
body = body.replace("sendTo",(sh.getRange(i + 3,8).getValue()));
}
if (sendToValue == "cc") ccAdr.push(sh.getRange(i + 3,9).getValue());
if (sendToValue == "bcc") bccAdr.push(sh.getRange(i + 3,9).getValue());
}
//メール送付時間になったら送付する
if (moment.isSame(deliveryDateTime,'hour')) {
MailApp.sendEmail({to:toAdr[0], cc:ccAdr[0], bcc:bccAdr[0], subject:title, body:body});
console.log("\nmailto: " + toAdr + "\n" + ccAdr + "\n" + bccAdr + "\n" +
"title: " + title + "\n" +
"body: " + body + "\n"
);
}
}
自動送信のための設定
Apps Script ダッシュボードからマイトリガーで以下の通り設定します。
これにより、1時間に一度スクリプトが起動し、スプレッドシートで指定した時間と重なった時に指定した宛先にメールを送信します。
重ならない時は空振りします。
結果
1時間ごとにスクリプトが実行されます。
なお、GASでのメールは1日の送信制限件数がありますので,
特に宛先が多い場合は気をつけてください。
Author And Source
この問題について(GASで簡易的な自動送信メルマガを作る), 我々は、より多くの情報をここで見つけました https://qiita.com/ryosuk/items/3b74db0d7f35dd310294著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .