【GAS入門】スプレッドシートから抽出したデータをメールで自動送信する方法

【GAS入門】スプレッドシートから抽出したデータをメールで自動送信する方法 GAS

こんにちは。イカPOです。「最終受注日が10か月以上経過したデータを自動抽出&メール通知する方法」のスクリプト解説第3弾です。
前回は、②のスプレッドシートから条件をつけてデータを抽出する機能を実装しました。

今回は、③の抽出したデータをメールで送信する機能を実装します。

スクリプトの処理手順でいえば③です。これが最後のフェーズです。

1️⃣ 顧客管理表を取得(スプレッドシートのデータを取得)(前々回)
2️⃣ 取得したデータから、最終受注日が10か月以上経過した顧客を探す(前回)
3️⃣ 一覧をメールで送信する ← 今ここ

GASでメールを送信する方法

GASでメールを送信するには、GmailApp.sendEmailを使用します。
Gmailクラスに存在する.sendEmailを使うことでメールを送信できます。

sendEmail(recipient, subject, body)の解説

recipientにはメールアドレス、subjectにはメールの題名、bodyにはメールの本文をそれぞれ渡すことができます。

GmailApp.sendEmail("hogehoge@gmail.com", "メール題名ですよ", "今日はいい天気ですね");

この場合、メールアドレス “hogehoge@gmail.com” に「メール題名ですよ」というタイトルの本文が「今日はいい天気ですね」というメールが送信されます。

今回の場合:

  • メールアドレス:自分のメールアドレス
  • メールのタイトル:自由(例:「受注経過日が10か月以上過ぎた顧客名」など)
  • 本文:前回抽出した条件にマッチしたデータを含む内容

メール送信用の関数の作成

コード.gsにメール送信用の関数を追加しましょう。
前回作成した配列データoverdueOrdersをメールで送信する関数なので、sendOverdueOrdersEmail()と名付けました。

コード全文

function sendOverdueOrdersEmail(overdueOrders) {
  if (overdueOrders.length > 0) {
    let emailAddress = Session.getActiveUser().getEmail(); 
    const subject = "10か月以上経過した最終受注日の通知";
    const body = `以下の受注日が10か月以上経過しています:\n\n${overdueOrders.join('\n')}`;

    GmailApp.sendEmail(emailAddress, subject, body);
    Logger.log("メールを送信しました。");
  } else {
    Logger.log("10か月以上経過した受注日はありません。");
  }
}

メール送信用関数の処理の手順

1️⃣ overdueOrdersを受け取る
2️⃣ アドレス、題名、本文を準備する
3️⃣ メールを送信する

この関数でやりたいことは3つです。シンプルですね。順番に記述していきましょう。

1️⃣ overdueOrdersを受け取る

function sendOverdueOrdersEmail(overdueOrders) {
if (overdueOrders.length > 0) {
} else {
Logger.log("10か月以上経過した受注日はありません。");
}
}

sendOverdueOrdersEmail()を宣言し、引数としてoverdueOrdersを受け取れるように準備します。
念のため、10か月以上のデータがなかった場合(条件に合うデータがなかった場合)を考慮してif文を用意します。

if (overdueOrders.length > 0) {
  // データがある場合の処理
} else {
  // else内に10か月以上経過したデータがない場合の処理を書く
  Logger.log("10か月以上経過した受注日はありません。");
}

overdueOrders.length > 0は、overdueOrders配列が1つ以上の要素を持つことを意味します。
このif文でoverdueOrdersがデータとして存在しているかを判断します。

2️⃣ アドレス、題名、本文を準備する

let emailAddress = Session.getActiveUser().getEmail(); // 自分自身のメールアドレスを取得
const subject = "10か月以上経過した最終受注日の通知";
const body = `以下の受注日が10か月以上経過しています:\n\n${overdueOrders.join('\n')}`;
  • 変数emailAddressSession.getActiveUser().getEmail()を使用して自分自身のメールアドレスを取得し格納します。
  • 変数subjectにはメールのタイトルが、変数bodyにはメールの本文が代入されます。

3️⃣ メールを送信する

GmailApp.sendEmail(emailAddress, subject, body);

このコードでメールを送信します。
変数emailAddress, subject, bodysendEmailに渡しています。

関数を手動で実行してみよう

作成した関数を実際に動かしてメールを送信するため、手動で以下の手順を実行してみましょう。

関数を選択後に実行をクリック
  1. Google Apps Scriptのエディタで「実行」→「関数を選択」でnotifyOverdueOrdersを選びます。
  2. 初回実行時には許可を求められるため、アクセスを許可してください。
  3. 許可後、Gmailを開いてメールが届いているか確認しましょう。

手動で送信が確認できれば成功です!

メール送信用の関数にトリガーを設定して自動送信しよう

メールを送信するコードが用意できました。
あとはこの関数notifyOverdueOrdersを好きな指定のタイミングで実行するだけで、メールを自動で送信できます。

自分自身の好きなタイミングで自動で実行するために、この関数にトリガーを設定しましょう。

トリガーを選択

Google Apps Scriptエディタのメニューからトリガーを選択します。

トリガーを追加をクリック

「トリガーを追加」ボタンを押して、新しいトリガーを設定します。

関数を選択し時間手動型を選択

関数名としてnotifyOverdueOrdersを選び、実行のタイミングを「時間主導型」などから選択しましょう。

設定が完了したら保存をクリック

設定を保存して完了です。これで指定したタイミングで自動的にメールが送信されます。

    補足事項

    .join(‘\n’)を使った改行について
    例えば以下のようなコードの場合、

    const overdueOrders = ["2023-04-10", "2023-03-15", "2023-02-28"]; 
    console.log(overdueOrders.join('\n'));

    このコードは以下のように出力されます。

    2023-04-10  
    2023-03-15
    2023-02-28

    アプリを実行しているユーザーのメールアドレスを取得する方法
    Session.getActiveUser().getEmail()
    この1文でアプリを実行しているユーザーのメールアドレスを取得できるため非常に便利です。

    まとめ

    今回はGASを使ってスプレッドシートから抽出したデータをメールで自動送信する方法を紹介しました。以下の3つのステップで自動化を実現できました。

    1. データの取得
    2. 条件付きのデータ抽出
    3. 抽出データのメール送信

    この一連の自動化手順により、業務の効率化が図れます。また、メール通知をトリガーで自動実行することで、手動作業を大幅に削減できます。

    今後、このスクリプトを応用して以下のような自動化にも取り組むことが可能です。

    • 定期的な在庫管理のリマインダー
    • チームメンバーへの進捗通知
    • 受注・発注状況の自動レポート送信

    ぜひこの自動化の仕組みを活用して、日々の業務を効率化してみてください。

    前々回と前回の記事

    スプレッドシートの取得方法と1行目をヘッダーとして扱う方法について

    条件付きでスプレッドシートからデータを抽出する方法について

    この記事についてのご意見や間違いのご指摘は、ぜひX(旧Twitter)でお知らせください!

    皆さまのフィードバックをお待ちしています。以下のアカウントまでお気軽にメッセージをお寄せください。

    この記事には筆者の個人的な解釈も一部含まれています。一つの参考としてお読みいただきつつ、最終的にはご自身や担当の方としっかり相談の上で判断いただけますと幸いです。

    皆様の声で情報をアップデートしていきます。よろしくお願いします。

    タイトルとURLをコピーしました