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つの書き方があります。
メソッド | 概要 | |
---|---|---|
1 | sendEmail(宛先, 件名, 本文) | メール メッセージを送信する |
2 | sendEmail( | CCやファイル添付などのオプションを設定する |
3 | sendEmail(宛先, 返信先, 件名, 本文) | 送信元と違う返信先にする |
4 | 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 | メールと一緒に送信するファイルの配列 |
bcc | Bcc で送信するメールアドレスのカンマ区切りのリスト |
cc | Cc に含めるメールアドレスのカンマ区切りのリスト |
from | メールの送信元アドレス。getAliases() によって返される値のいずれかにする必要があります。 |
htmlBody | 設定すると、HTML をレンダリングできるデバイスは、必須の本文引数の代わりにそれを使用します。メール用にインライン画像を用意する場合は、HTML 本文にオプションの inlineImages フィールドを追加できます。 |
inlineImages | 画像キー(String )から画像データ(BlobSource )へのマッピングを含む JavaScript オブジェクト。これは、htmlBody パラメータが使用され、<img src="cid:imageKey" /> 形式でこれらの画像への参照が含まれていることを前提としています。 |
name | メールの送信者の名前(デフォルト: ユーザー名) |
noReply | true : 受信者がメールに返信しないよう、一般的な返信不可のメールアドレスからメールを送信する必要がある場合。このオプションは 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 = "健康診断の結果"; // メールの件名
上記のコードは、主にスプレッドシートの指定と件名の設定をしています。
var sheet
で現在開いているアクティブなシートを取得しています。var data
でシートにあるすべてのデータを二次元配列で取得しています。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に移動します。
コメント