見出し画像

【生成AI×GAS】複数宛先メール送信GASの解説②

オレンジピーチのトシです。
前回の記事の続きで、GASを用いて複数宛先にGmailを作成・送信するプログラムのコードを解説していきたいと思います。
(作成したプログラムや、前回の解説はこちらから)


前回のおさらい

解説の対象としているGASがこちらです。
前回の解説で、スプレッドシートのB列にあるメールアドレスの値を取得するところまで解説しました。
今回は、取得した値について解説したいと思います。

function sendEmail() {
  // スプレッドシートを開く
  var sheet = SpreadsheetApp.getActiveSheet();

  // B列2行目から最終行までのメールアドレスを取得
  var lastRow = sheet.getLastRow();
  var emailRange = sheet.getRange("B2:" + "B" + lastRow);
  var emailList = emailRange.getValues();

  // 件名と本文を設定
  var subject = "月次進捗ファイル(7月度)の更新依頼";
  var body = "";
  body += "株式会社オレンジピーチ \n";
  body += "\n";
  body += "営業部 青森 太郎 様\n";
  body += "おつかれさまです。\n";
  body += "企画部の橙桃です。\n";
  body += "7月度の月次進捗ファイルの更新をお願いいたします。\n";
  body += "締切は、7月25日となります。それまでに、リンクの月次進捗表を更新して下さい。\n";
  body += "\n";
  body += "営業部 青森 月次進捗ファイル\nURL: ********\n";
  body += "\n"
  body += "どうぞよろしくお願いします。";

  // 各メールアドレスにメールを送信
  for (var i = 0; i < emailList.length; i++) {
    var recipient = emailList[i][0];
    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body
    });
  }
}

作成の記事はこちらをご覧ください。

GASの内容解説②

前回の記事で、下記のコードを確認しました。

// スプレッドシートを開く
var sheet = SpreadsheetApp.getActiveSheet();
// B列2行目から最終行までのメールアドレスを取得
var lastRow = sheet.getLastRow();
var emailRange = sheet.getRange("B2:" + "B" + lastRow);
var emailList = emailRange.getValues();

ここまでで、変数emailList には、スプレッドシートに記載していたメールアドレスが格納されているはずです。
その内容を確認してみましょう。
(今回はスクリプトを編集して確認して行きたいと思います。「デバッグ」という方法もありますが、より多くのプログラム知識が必要になるため割愛します)

コメント機能を用いて、コメントアウトする

ここでは、変数emailList の内容を確認する前に、スクリプトの一部をコメントアウトしていきます。
コメントアウトとは、コメント機能を用いて一時的に実行したくないコードを読み込まないようにすることです。
スクリプトの後半部分の、「各メールアドレスにメールを送信」の箇所をコメントアウトしたいので、前後を「/*」と「*/」で囲みます。
実際に操作をすると、「/*」と「*/」の間のコードがグレーに変化します。
間の部分は、コメントとして扱われるため、命令文が実行されることはありません。つまり、GASを実行してもメールは配信されなくなります。

function sendEmail() {
  // スプレッドシートを開く
  var sheet = SpreadsheetApp.getActiveSheet();

  // B列2行目から最終行までのメールアドレスを取得
  var lastRow = sheet.getLastRow();
  var emailRange = sheet.getRange("B2:" + "B" + lastRow);
  var emailList = emailRange.getValues();

  // 件名と本文を設定
  var subject = "月次進捗ファイル(7月度)の更新依頼";
  var body = "";
  body += "株式会社オレンジピーチ \n";
  body += "\n";
  body += "営業部 青森 太郎 様\n";
  body += "おつかれさまです。\n";
  body += "企画部の橙桃です。\n";
  body += "7月度の月次進捗ファイルの更新をお願いいたします。\n";
  body += "締切は、7月25日となります。それまでに、リンクの月次進捗表を更新して下さい。\n";
  body += "\n";
  body += "営業部 青森 月次進捗ファイル\nURL: ********\n";
  body += "\n"
  body += "どうぞよろしくお願いします。";

/*
  // 各メールアドレスにメールを送信
  for (var i = 0; i < emailList.length; i++) {
    var recipient = emailList[i][0];
    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body
    });
  }

*/
}

このようにコメントアウトを有効に利用すると、スクリプトの確認が容易になります。

Logger.logによるログ出力

次に、ログを確認したい部分に、Logger.log のメソッドを用いて出力します。出力したい箇所に Logger.log(変数)のメソッドを追記します。

Logger.log を追加する

そして、GASを実行すると、実行ログに 変数emailList の内容が出力されます。

Logger.log によるemailList の内容出力

(logを出力するメソッドには、Logger.log の他に、Console.log というメソッドも使用できます。どちらも「ログを出力する」という機能は共通していますが、細かな部分では実行できる内容が異なるので、用途に合わせて利用するのが良いと思います。個人的には、簡便にログ出力を見たい場合はLogger.log、複雑な内容をログ出力したい場合はconsole.log と使い分けています。)

emailList の内容確認(Logger.logによるログ出力)

出力された内容を見てみましょう。
スプレッドシートのメールアドレスの内容が、変数に格納されていることが分かります。
(全てのメールアドレスを "******@Gmail.com" としてしまったため、分かりにくくなっていますが、左からB2セル、B3セル、B4セルの内容となっています)m(__)m

Logger.log によるemailList の内容出力
スプレッドシートのメールアドレスリスト

次に、ログの内容を詳しく見ていきたいと思います。

二次元配列と要素

出力されたログを見てみましょう。

[[******@gmail.com], [******@gmail.com], [******@gmail.com]]

二次元配列の形で格納されていることが分かります。
大きく角括弧[ ]で囲まれた中に、それぞれの配列が角括弧[ ]に囲まれており、その中にそれぞれの要素が格納されています。
このように、スプレッドシートのデータで取得した場合、二次元配列の形で取得されることが多くあります。
後ほど、この二次元配列から必要な要素を自動的に取り出して、Gmail操作を行っていきます。

ここまでのまとめ

今回は、スプレッドシートから取り出した値(メールアドレス)が、GASの中でどのように格納されているかを説明しました。
特に、最後のパートの説明は、やや難しく感じる人もいるかもしれません。
次回、配列と要素について、詳しく説明しますので、そちらも併せて読んで頂けると理解が深まると思います。
みなさんのGASへの理解が少しでも深まるとHappyです。

今回は以上です。最後まで読んで頂き、ありがとうございました。
記事の内容が参考になった方は、「スキ」して頂けると励みになります。

この記事が少しでもお役に立てたのなら、サポートいただけると嬉しいです。頂いたご支援は、今後の活動費やコンテンツの質向上に使わせていただきます。