【初心者向け】GASを使ったメール送信を解説、スプシのリストに一斉送信する方法も

GASを使ったメール送信、sendEmailの使い方 GAS

GASを使ってメール送信するスクリプトは次の通りです。メールアドレスは実際のアドレスに変更してください。

function myFunction() {
  var recipient = "recipient@example.com";
  var subject = "テストメール"; 
  var body = "テストメールです。"; 
  MailApp.sendEmail(recipient, subject, body);
}

スクリプトを実行するとメールが届いているのが確認できます。ただ、ここを見ていただいている多くの方が、何らかの条件でメールを送信したいと思っていることでしょう。普通にメールしたほうが早いですからね。

たぬき平社員
たぬき平社員

とはいえ、MailApp.sendEmailがなければメール送信できません。上記のコードは基礎中の基礎ということですね

きつね部長
きつね部長

ほーん(わからん)

どんな条件を加えるにしても、先ほどのスクリプトに「コードを足す」ことになるのです。この記事でGASを使ったメール送信の基本、スプレッドシートのリストにメールするスクリプト、自動メール送信についてがわかります。

sendEmailとは

sendEmailとは、MailAppクラスにあるメソッドでGメールを操作します。sendEmailメソッドは次の4つの書き方があります。

メソッド概要
sendEmail(宛先, 件名, 本文)メール メッセージを送信する
sendEmail(宛先, 件名, 本文, オプション)CCやファイル添付などのオプションを設定する
sendEmail(宛先, 返信先, 件名, 本文)送信元と違う返信先にする
getRemainingDailyQuota()メールを送信できる宛先の数を返す

上から順に説明しますが、メールを送信するという一般的な機能が必要な場合は1番と2番だけで大丈夫です。

送信元と違うアドレスに返信させたい場合は3番をご覧ください。CCやBCCを含めて1日で100通前後を送信する場合は4番のメソッドを知っておく必要があります。

たぬき平社員
たぬき平社員

1日100通未満で相手からの返信先は気にしない方は1と2だけで大丈夫です

きつね部長
きつね部長

僕のアドレスをCCにいれて欲しくないんだけど

たぬき平社員
たぬき平社員

……(責任逃れしようとしやがって)

1.sendEmail(宛先, 件名, 本文)

function myFunction() {
  //
  var recipient = "recipient@example.com";
  var subject = "テストメール"; 
  var body = "テストメールです。"; 
  MailApp.sendEmail(recipient, subject, body);
}

一番最初に紹介したスクリプトです。宛先、件名、本文それぞれに対応する変数を準備して、sendEmailメソッドに渡します。

2.sendEmail(宛先, 件名, 本文, オプション)

optionを加えることで他のメールクライアントと同様にCCやファイル添付などの設定ができます。オプションは9つあります。

名前説明
attachmentsメールと一緒に送信するファイルの配列
bccBcc で送信するメールアドレスのカンマ区切りのリスト
ccCc に含めるメールアドレスのカンマ区切りのリスト
fromメールの送信元アドレス。getAliases() によって返される値のいずれかにする必要があります。
htmlBody設定すると、HTML をレンダリングできるデバイスは、必須の本文引数の代わりにそれを使用します。メール用にインライン画像を用意する場合は、HTML 本文にオプションの inlineImages フィールドを追加できます。
inlineImages画像キー(String)から画像データ(BlobSource)へのマッピングを含む JavaScript オブジェクト。これは、htmlBody パラメータが使用され、<img src="cid:imageKey" /> 形式でこれらの画像への参照が含まれていることを前提としています。
nameメールの送信者の名前(デフォルト: ユーザー名)
noReplytrue: 受信者がメールに返信しないよう、一般的な返信不可のメールアドレスからメールを送信する必要がある場合。このオプションは Google Workspace アカウントでのみ使用できます。Gmail ユーザーでは使用できません。
replyToデフォルトの返信先アドレスとして使用するメールアドレス(デフォルト: ユーザーのメールアドレス)
たぬき平社員
たぬき平社員

使用頻度が多い、CcとBccを設定したスクリプトが下記です

function myFunction() {
  var recipient = "recipient@example.com";
  var subject = "テストメール"; 
  var body = "テストメールです。"; 
  var option = {
    //複数人いる場合はカンマで区切る
    cc: 'kitsune@example.com, recipient-cc2@example.com',
    bcc: 'kitsune@example.com'
  }
  MailApp.sendEmail(recipient, subject, body, option);
}

基本的には1番と一緒ですが、オプション用の変数(上記であればoption)を準備して、その中にccやbccのプロパティを設定します。複数人に送信したい場合は,(カンマ)でメールアドレスを区切ります。

たぬき平社員
たぬき平社員

複数人に送信したい場合は,(カンマ)でメールアドレスを区切ってください

きつね部長
きつね部長

あれ、CcにもBccにも僕のアドレス入ってない?気のせい?

3.sendEmail(宛先, 返信先, 件名, 本文(, オプション) )

受信者の返信先を送信元と別のアドレスに設定したい場合に使用します。

function myFunction() {
  var recipient = "recipient@example.com";
  var subject = "テストメール"; 
  var body = "テストメールです。"; 
  var option = {
    cc:'recipient-cc1@example.com',
    bcc:'recipient-bcc1@example.com'
  }
  MailApp.sendEmail(recipient, replyTo, subject, body, option);
}

受信者が返信しようとするとreplyToで設定したメールアドレスで返信画面が作成されます。

とはいえ、送信元のアドレスが隠せるという訳ではなく、返信画面の宛先が変わるだけです。送信先には送信元のアドレスは表示されます。

たぬき平社員
たぬき平社員

絶対に返信は受け取りたくない場合は、オプションにあるnoreplyを設定してください。ただし有償のGoogleアカウント(Google Workspace)の登録が必要です。

きつね部長
きつね部長

僕のメールアドレスもそれにして欲しいなあ

getRemainingDailyQuota()

getRemainingDailyQuotaとは、メール送信可能な残数を返すメソッドです。基本的にグーグルの無料アカウントではCCやBccを含めて1日100通の送信(実行回数)が上限に設定されています。

function myFunction() {
  Logger.log(MailApp.getRemainingDailyQuota());
}

上記のコードで残数がログに表示されます。メール送信があと何通できるか知りたいときや、残数限界にメール送信したいときなどにgetRemainingDailyQuotaメソッドを使用すると良いでしょう。

たぬき平社員
たぬき平社員

無料アカウントでは1日100通が上限ですが、有償のGoogleアカウント(Google Workspace)は1,500通まで増やすことができます

スプレッドシートのリストにメールを一斉送信する

実践としてスプレッドシートにあるメーリングリストにメールを送信する方法についてご紹介します。下記のような表に基づいて、各社員に健康診断の結果をメールしましょう。

社員メール健康診断の結果所感
たぬきrecipient1@example.com引き続き維持してください
きつねrecipient2@example.com中年太り
うさぎrecipient3@example.com痩せすぎの傾向
らいおんrecipient4@example.comコレステロール値高
しかrecipient5@example.com鹿せんべい食べ過ぎ
きつね部長
きつね部長

私が中年太りということを、なんで知っているんだ…!

たぬき平社員
たぬき平社員

ふふ

メンバーに一斉送信するスクリプトは次の通りです。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var subject = "健康診断の結果"; // メールの件名

  // ヘッダーを抜いた2行目から
  for (var i = 1; i < data.length; i++) {
    var recipient = data[i][1]; // 宛先のメールアドレス
    var body = 
      data[i][0] + "さま\n\n" + 
      "たぬきからの健康診断のお知らせ\n\n" + 
      "結果 :" + data[i][2] + "\n" + 
      "所感 :" + data[i][3] + "\n\n" + 
      "上記の結果となったことをお知らせします。";
    
    MailApp.sendEmail(recipient, subject, body);
  }
}
たぬき平社員
たぬき平社員

はじめに言ったとおり、sendEmailメソッドが使われていますね

次でスクリプトの内容を詳しく解説します。

スクリプト解説

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var subject = "健康診断の結果"; // メールの件名

上記のコードは、主にスプレッドシートの指定と件名の設定をしています。

  1. var sheet で現在開いているアクティブなシートを取得しています。
  2. var data でシートにあるすべてのデータを二次元配列で取得しています。
  3. var subject は全員に共通なので、ループ外で宣言しています。
// ヘッダーを抜いた2行目から
  for (var i = 1; i < data.length; i++) {
    var recipient = data[i][1]; // 宛先のメールアドレス
    var body = 
      data[i][0] + "さま\n\n" + 
      "たぬきからの健康診断のお知らせ\n\n" + 
      "結果 :" + data[i][2] + "\n" + 
      "所感 :" + data[i][3] + "\n\n" + 
      "上記の結果となったことをお知らせします。";
    
    MailApp.sendEmail(recipient, subject, body);

上記のコードでは、二次元配列からデータを一つずつ取り出して、メールの文面を作成・送信します。for文は取得した配列数分のメールを送信すれば自動的に終了します。

具体的には、

  • data[i][0] は A 列のデータ、
  • data[i][1] は B 列のデータ、
  • data[i][2] は C 列のデータ、

というように、配列内のデータが格納されています。ご自身のスプレッドシートに合わせて列番号は修正してください。

また、data[i][i] 部分は for 文によって自動的に更新されていくので、本スクリプトにおいては変更する必要はありません。

下記はfor文と配列についての記事です。詳しく知りたい方はこちらをご参照ください。

まとめ

GASをつかったメール送信についてご説明しました。当記事があなたの参考になれば幸いです。

きつね部長
きつね部長

…ねえ、なんだかメールがすごいたくさん来るんだけど

たぬき平社員
たぬき平社員

やっぱりきつね部長は頼りになるなあ

きちんとGASについて学びたい人は「詳解! Google Apps Script完全入門 [第3版]」もおすすめです。クリックするとAmazonに移動します。

コメント

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