みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
引き続きGoogle Apps Scriptで簡単メールマガジンシステムを作成しています。
前回はこちらの記事。
Googleドキュメントで作成したメール本文にスプレッドシートの宛先リストの社名、宛名を差し込む方法についてお伝えしました。
今回はいよいよ差し込みをしたメール本文を順次Gmailで送信する処理を追加して、Google Apps Scriptによる超簡易メルマガ配信システムを完成させます!
といってもすごく簡単で、全体としてはたったの28行のスクリプトで実現できます。
では、よろしくお願いします!
前回のおさらい:ドキュメント本文に差し込みをしてログ出力
では、まず前回のおさらいをしていきましょう。
まず宛先リストをスプレッドシートで作っていましてこちらです。
メール本文はドキュメントで作っていましてこちらです。
{社名}、{姓}、{名}の3か所をそれぞれの送り先に合わせて差し込みをします。
前回作成したスクリプトはこちらです。
function insertName(){ const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); const DOC_URL = '*****ドキュメントのURL*****'; const doc = DocumentApp.openByUrl(DOC_URL); const docText = doc.getBody().getText(); for(let i = 2; i <= lastRow; i++){ const company = sheet.getRange(i,1).getValue(); const lastName = sheet.getRange(i,2).getValue(); //姓 const firstName = sheet.getRange(i,3).getValue(); //名 const body = docText .replace('{社名}',company) .replace('{姓}',lastName) .replace('{名}',firstName); console.log(body); } }
スクリプトの流れとしては、以下のようになります。
- スプレッドシートを取得
- ドキュメントからメール本文docTextに取得
- スプレッドシートの各レコードについて
- 社名、姓、名をdocTextに差し込んでbodyを作成
- bodyをログ出力
今回は3-2の部分をGmailで送信するという内容に変更していけばOKということですね。
スプレッドシートのアドレス宛にGmailでメールを送る
Google Apps Scriptを使ってGmailでメールを送る方法はこちらの記事でお伝えしています。
GmailApp.sendEmailメソッドを使いますね。
引数としては以下が必要ですね。
- 宛先アドレス
- 件名
- 本文
あと、オプションはオブジェクトを渡しますが、nameプロパティのみを指定したいと思います。
件名、差出人名を準備
表題、差出人名については、各レコードに依存せずに固定の値なのでfor文の外で指定をしておきます。
const subject = 'メルマガ送信テスト'; const options = {name: 'いつも隣にITのお仕事'};
メールアドレスを取得してメールを送信
宛先アドレス、つまり各レコードのメールアドレスはD列に記載されていますので、以下のように取得します。
const recipient = sheet.getRange(i, 4).getValue();
これでGmailで送信するための引数はすべて揃いましたのであとは送るだけ。
GmailApp.sendEmail(recipient, subject, body, options);
これでOKなはずです。
メルマガ配信の実行結果
実行をしてみますと、各アドレス宛にメールが届きます。
例えば、こんな感じです。
ちゃんと、社名や宛名の姓名などの差し替えもきいていますね。
現在は2件だけですが、件数が多くなった場合はとってもメール送信が楽になります。
ただ、Google Apps Scriptの仕様上、無料アカウントの場合は1日の最大メール配信数が100通という制限(G Suiteユーザーなら1,500通まで)があります。
その場合は、リストに100件を超える宛先がある場合は数日にわけて配信する必要があります。
まとめ
以上、Google Apps Scriptで超簡易メールマガジンシステムを作成しました。
スクリプトはこちらです。
function sendMail(){ const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow();; const DOC_URL = '*****ドキュメントのURL*****'; const doc = DocumentApp.openByUrl(DOC_URL); const docText = doc.getBody().getText(); const subject = 'メルマガ送信テスト'; const options = {name: 'いつも隣にITのお仕事'}; for(let i = 2; i <= lastRow; i++){ const company = sheet.getRange(i, 1).getValue(); const lastName = sheet.getRange(i, 2).getValue(); //姓 const firstName = sheet.getRange(i, 3).getValue(); //名 const recipient = sheet.getRange(i, 4).getValue(); const body = docText .replace('{社名}',company) .replace('{姓}',lastName) .replace('{名}',firstName); GmailApp.sendEmail(recipient, subject, body, options); } }
ドキュメントやスプレッドシートの準備は必要ですが、とってもシンプルなスクリプトで各種Google Appsを操作そして連携できますね。
さすが、Google Apps Script!
次回は、処理の高速化について考えていきます。
どうぞお楽しみに!
コメント
たったの38行!Google Apps Scriptで超簡易メルマガ配信システム
こちらの記事を拝見しました。そこで1つ教えてください。
差し込みメールにて、ccも個々のアドレスを差し込みたいです。
そして添付ドキュメントも送付したいです。ドキュメントは1つのみ、同一のドキュメントを一斉送付したいのですが、掲載のスクリプトに何をどう追記すればいいのか分かりません。大変お手数を掛けますが、教えてください。
高橋様
こちらの記事とても参考になり、今月の頭から実際にscriptを使ったメール配信を
開始することが出来ました。ありがとうございます!
G-suiteで有償アカウントを取得しているのですが、1日の送信上限が100件のままです。
何か回避する術はありませんでしょうか?
googleに問い合わせしてもscriptはサポート対象外と言われ、非常に困っております。
鈴木さん、ご覧いただきましてありがとうございます。
メール送信数の上限についてですが、もし仕様期間の場合、または使用期間後すぐでアカウント数が少ないのでしたら、以下条件に引っかかっている可能性があります。
試用期間が終わっていれば、手動で一定の支払を前払いすれば上限がアップグレードされるようです。
https://support.google.com/a/answer/166852
以上、ご確認いただければ幸いです。
高橋様
お礼が遅くなり申し訳ありません。事前支払いで合計30米$以上を払った結果、
上限の解除ができました。本当に助かりました。
今後共、勉強させていただきます。
鈴木亮太様
ご連絡ありがとうございます!
お役に立てて良かったです。
今後ともどうぞよろしくお願いいたします!
タカハシノリアキ 様
お世話になります。
このスクリプト、非常に便利です!
さっそくですが、質問させてください!
メーリスのあたまに{社名} {姓} {名} を入れることは成功したのですが、文中に
「{姓}さんもお体に気を付けて~」といった文章を入れたいときには、どのようなスクリプトを組めばよろしいでしょうか。
また、別のかたも質問をされていたようですがPDFファイルを添付する方法がありましたら、合わせて教えて頂けると幸いです。
お忙しいところ恐縮ですが、ご教示くださいますようお願い申し上げます。
尾中たけおさん
コメントありがとうございます!
おそらく、スクリプトは変更する必要はないかと思います。
そのままの文言「{姓}さんもお体に気を付けて~」をドキュメント内に記載頂ければ、その箇所も置換されると思います。
試してみて頂ければ嬉しいです!
タカハシノリアキ 様
お返事ありがとうございました。
いろいろと試してみましたが反映されませんでした。
何がダメなのか・・・。
また、PDFかJPGの添付方法もお分かりでしたらよろしくお願い申し上げます。
そのものズバリではありませんが、以下記事が参考になると思います。
https://tonari-it.com/gas-sent-mail-attaced-pdf/
あらためて、Gmailへのファイル添付の方法を記事にしましたので、こちらもご参考にしてみてください。
https://tonari-it.com/gas-send-gmail-files/
送り先がエラーだとその場で止まってしまうのですが
エラー処理はどうしたらいいでしょうか。
渡辺様
コメントありがとうございます。
エラー処理については、try~cathc文を使う方法があります。
以下、記事をご参考いただければと思います。
https://tonari-it.com/gas-error-try-catch/
高橋さま
お世話になります!通常使っていたgmailでgoogleフォーム入力者への自動返信メールを設定しましたが、上限100日があり、機能しない場面があります。そこで、有償化しようとしたのですが、通常のgmailでは有償化出来ずでした。何か対策はないでしょうか?
鈴木さん
コメント遅くなりましてすみません。
個人の方でもG Suiteに登録することはできると思います。ただ、別のドメインは必要かもしれません。
http://www.dontokoiapps.com/2016/10/gsuite-faq.html
businessユーザーとは
・Gsuite の「business」 プラン
・Google マイビジネス
・ビジネス用のgmail
のどれを指されてますでしょうか。
たいようさま
コメントありがとうございます。
「Businessユーザー」は今で言うと「G Suiteユーザー」ですね。G Suiteのいずれかのプランで利用されているアカウントであればOKです。
今では表現が適切ではないので、本文内も修正をさせていただきました。
お問い合わせに感謝いたします。
迅速なご対応、大変ありがとうございます。
本当に助かりました。
今後も参考にさせていただきます。