今すぐコピペできるウェブマーケお役立ちネタやSEO情報

非エンジニアのSEOとウェブマーケ

GAS ウェブマーケ

スプレッドシートで完結!メアド取得からアンケート送信までGASで全部自動化する!

2020年7月5日

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays

今まで以下のスプレッドシートとGoogle App Script(以降GAS)でメールアドレス自動取得、Bcc一括送信などご紹介しましたが、この記事ではGASを使ってメールアドレス自動取得からBcc一括送信を毎日行うGASをご紹介します!

アンケート送信を自動化して業務の効率化&サクッと自社の強みや改善点をゲットしちゃいましょう!

Google Apps ScriptとスプレッドシートでBcc一括送信ツールを作ってみよう!

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! 例えば申込者や契約者の方にアンケートや何かしらのメールを送りたい、でも開発とか工数かけられないという方向けにス ...

続きを見る

GASとスプレッドシートでGmailから任意のタイトルのメアドを一括取得するツールを作る

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! 例えば昨日の自社のサービスに契約した方にアンケートやサンキューメールを送りたい、申込み件数を簡単に把握したい、 ...

続きを見る

自由記入アンケートでユーザーの真の声をもらう!実例とサンプルを紹介!

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! ウェブマーケターのみなさんならユーザーにアンケートを送信し、どんなことを考えたり気にしてるか傾向があるかなど確 ...

続きを見る

作業順の洗い出し確認

アンケート自動送信化を行うにあたり必要な作業を順番に確認します。

  1. 件名と送信者でフィルタリングした送信先メールアドレスの取得
  2. 取得したメールアドレスをスプレッドシートに記載する
  3. 件名、本文、送信時間を記載する
  4. 送信する

おおまかに以上の作業が必要になります。

もちろんすべてスプレッドシートとGASで行うのでご安心ください!

送信先メールアドレスの取得〜件名、本文、送信時間を記載する

以下の記事の応用スクリプトです。

GASとスプレッドシートでGmailから任意のタイトルのメアドを一括取得するツールを作る

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! 例えば昨日の自社のサービスに契約した方にアンケートやサンキューメールを送りたい、申込み件数を簡単に把握したい、 ...

続きを見る

スクリプトを設定する

スプレッドシート>ツール>スクリプトエディタで以下をコピペします。xxxxについては後述します。

function searchEmail(sheet_name, title_s, date_s, from_s, send_title, desc) {
  const LIMIT_MAX_SEARCH = 1000 // 1日5万件の制限あり
  var today_noon = new Date();
  today_noon.setHours(12);
  today_noon.setMinutes(0);
  today_noon.setSeconds(0);
  const title_s2 = "subject:(" + title_s + ")"
  const from_s2 = "from: " + from_s
  const search_condition = from_s2 + " " + date_s + " " + title_s2
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var n = 0
  const GMAIL_MAX_GET = 500
  const sheet = ss.getSheetByName(sheet_name);
  const messages_out = sheet.getDataRange().getValues();
  do {
    // GmailApp.search(search_condition, start_position, max=500)
    var threads = GmailApp.search(search_condition, n, GMAIL_MAX_GET)
    for (var t in threads) {
      // GAS has bug of using `const` and `let` inside for-loop. only `var` is acceptable.
      var thread = threads[t]
      var msgs = thread.getMessages()
      var i = messages_out.length
      for (var m in msgs) {
        i++;
        var msg = msgs[m]
        var to_ = msg.getTo()
        if(!messages_out.some(row => row.includes(to_))){
          messages_out.push([to_, send_title, desc, Utilities.formatDate(today_noon, 'Asia/Tokyo', "yyyy/MM/dd HH:mm:ss"), "", "", "=COUNTIF(A:A,A" + i + ")"])
      }}
    }
    n = n + GMAIL_MAX_GET
  } while (threads.length > 0 && n <= LIMIT_MAX_SEARCH)
  if (messages_out.length === 0) return;
  sheet.getRange(1, 1, messages_out.length, messages_out[0].length).setValues(messages_out);

}


function addEmail(){
  const from_s = "xxxx@xxxx"; //送信元のメールアドレス
  const title_xxxx = "xxxx" //回収したいメアドに送っている件名
  const sheet_xxxx1 = "xxxx2" //以下の内容を記載するシート名
  const send_title_xxxx = "xxxx" // 送信したい件名
  const desc_xxxx = "xxxx"  //送信したい本文 \nは改行指示
  var today = new Date();
  var startday = new Date();
  startday.setDate(startday.getDate() - 1);
  //var startday = new Date(2020, 5, 12, 0, 0, 0);
  const date_s = "after:" + Utilities.formatDate(startday, 'Asia/Tokyo', "yyyy/MM/dd") + " before:" + Utilities.formatDate(today, 'Asia/Tokyo', "yyyy/MM/dd")

  searchEmail(sheet_xxxx, title_xxxx, date_s, from_s, send_title_xxxx, desc_xxxx); //41行目〜44行目のconst @@@@_xxxxと同じ文字列にしてください。
}

※40行目以降のxxxx or xxxx数字を適宜変えてください。

※searchEmailとaddEmailは適宜変えて問題ありません。この記事ではsearchEmailとaddEmailとして記載を続けます。

  • 条件に合致した前日のメールアドレスを取得
  • const send_title、const desc_の内容を記載
  • 4行目の送信希望時間を反映
  • 重複したメールアドレスを排除(28行目)
  • 排除した証跡に1を記載

します。

成功すると以下のような結果がスプレッドシートに反映します。

自動送信するスクリプトを設定する

スクリプトエディタ>ファイル>New>スクリプトファイルで新しいスクリプトファイルを作り、以下をコピペします。xxxxについては後述します。

function calledByCron() {
  var sheet = SpreadsheetApp.getActiveSheet();  // シートの取得
  const sheet_xxxx1 = "xxxx2" //
  sendEmailFromSheet(sheet_xxxx1);
}

function sendEmailFromSheet(sheet_name){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheet_name);
  var startRows = 2;  // 開始行数
  var sheetData = sheet.getSheetValues(startRows, 1, sheet.getLastRow(), sheet.getLastColumn());  // シートのデータを取得(2次元配列)
  var dtLimit = new Date();  // 現在時刻を取得
  var options = {"from": "xxxx3 <xxxx@xxxx>"};
  // シートの各行ごとにデータを取り出す
  sheetData.forEach(function(value, index) {
    // 送信完了していない、かつ送信予定日時が現在時刻より前ならば、メールを送信する
    if (!value[4] && (new Date(value[3])).getTime() < dtLimit.getTime()) {
      GmailApp.sendEmail(value[0], value[1], value[2],options);  // メールを送信する
      sheet.getRange(startRows + index, 4 + 1).setValue(dtLimit);  // 送信完了日時をシートに書く
    }
  });
}
  • xxxx1とxxxx2は前述の42行目と同じです。
  • xxxx3は送信者名と送信者メールアドレスです。
  • CalledByCronは適宜変えて問題ありません。この記事ではCalledByCronとして記載を続けます。

トリガーを設定する

スクリプトエディタ>編集>現在のプロジェクトのトリガーを開き、トリガーを追加します。

addEmailスクリプトのトリガーを設定する

以下設定します。

  • 実行する関数 > addEmail
  • デプロイ時に実行 > Head
  • イベントのソースを選択 > 時間主導型
  • 時間ベースのトリガーのタイプを選択 > 日付ベースのタイマー
  • 時刻を選択 > 午前9時〜10時

毎日午前9時〜10時の間にスクリプトが走り、メアド回収〜件名等を記載します。

CalledByCronスクリプトのトリガーを設定する

前述と同様にトリガーを追加します。

以下設定します。

  • 実行する関数 > addEmail
  • デプロイ時に実行 > Head
  • イベントのソースを選択 > 時間主導型
  • 時間ベースのトリガーのタイプを選択 > 日付ベースのタイマー
  • 時刻を選択 > 午後12時〜1時

毎日午後12時〜1時の間にスクリプトが走り、メールを送信します。

スクリプトが走ったあとの結果

はい、というわけで送信完了後にタイムスタンプが押されました!

終わりに

このツールがあればエンジニアいらずで自動Bcc一括送信可能です!

アンケートメールの他にもイレギュラーな内容を100ユーザーに送りたいというような、緊急度が高いけどBcc使うの怖いときなどに使えますね!

というわけでGASとスプレッドシートの連携で簡単に毎日メールを自動送信し続ける方法でした!

→のツイッターアカウントでも色々つぶやいてるので是非フォローしてください☆@koba_tokyodays

↓の記事はBcc一括送信、メールアドレス取得、アンケート送信内容についてそれぞれ詳しく触れてるので要チェック!

Google Apps ScriptとスプレッドシートでBcc一括送信ツールを作ってみよう!

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! 例えば申込者や契約者の方にアンケートや何かしらのメールを送りたい、でも開発とか工数かけられないという方向けにス ...

続きを見る

GASとスプレッドシートでGmailから任意のタイトルのメアドを一括取得するツールを作る

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! 例えば昨日の自社のサービスに契約した方にアンケートやサンキューメールを送りたい、申込み件数を簡単に把握したい、 ...

続きを見る

自由記入アンケートでユーザーの真の声をもらう!実例とサンプルを紹介!

こんにちは!非エンジニアでウェブマーケターの木庭です @koba_tokyodays ! ウェブマーケターのみなさんならユーザーにアンケートを送信し、どんなことを考えたり気にしてるか傾向があるかなど確 ...

続きを見る

-GAS, ウェブマーケ
-, , , ,

© 2021 非エンジニアのSEOとウェブマーケ