GASでスプレッドシートからメールを自動送信する方法【実演スクショ付き】
この記事について
私はGAIDEというGAS自動化ツールを開発しています。ユーザーからの要望で最も多いのが「スプレッドシートからメールを自動で送りたい」です。この記事では、GAIDE開発の中で検証してきたメール送信の実装パターンと、初心者がハマりやすいポイントを実際の画面スクリーンショット付きで解説します。
完成イメージ
最初に完成形を見せます。スプレッドシートにこのような送信リストがあるとします。
A列に名前、B列にメールアドレス、C列に件名、D列に本文が入っています。GASを実行すると、各行の宛先にGmailが自動送信されます。送信済みのメールはGmailの「送信済み」フォルダに入ります。
ステップ1:スプレッドシートを準備する
まず、Googleスプレッドシートを新規作成し、以下の構成でデータを入力してください。
A1に「名前」、B1に「メールアドレス」、C1に「件名」、D1に「本文」と入力し、2行目以降に送信先のデータを入れます。
テスト段階では、B列に自分のメールアドレスを入れて動作確認するのがおすすめです。
ステップ2:GASエディタでコードを書く
スプレッドシートのメニュー「拡張機能」→「Apps Script」を開き、以下のコードを貼り付けてください。
function sendEmailsFromSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const data = sheet.getDataRange().getValues();
let sentCount = 0;
// 1行目はヘッダーなのでスキップ
for (let i = 1; i < data.length; i++) {
const name = data[i][0];
const email = data[i][1];
const subject = data[i][2];
const body = data[i][3];
// メールアドレスが空の行はスキップ
if (!email || email.toString().trim() === '') continue;
try {
GmailApp.sendEmail(email, subject, body, {
name: 'あなたの名前'
});
sentCount++;
// 送信済みフラグをE列に記録
sheet.getRange(i + 1, 5).setValue('送信済み');
sheet.getRange(i + 1, 6).setValue(new Date());
} catch (error) {
sheet.getRange(i + 1, 5).setValue('エラー: ' + error.message);
}
}
Logger.log(sentCount + '件のメールを送信しました');
}
コードのポイント解説
このコードで重要なのは3つです。
1つ目は GmailApp.sendEmail() を使っている点です。GASにはメール送信用のクラスとして MailApp と GmailApp の2種類があります。MailApp はシンプルな送信のみ、GmailApp は送信者名の指定・CC/BCC・HTML形式のメール・下書き作成など高度な機能が使えます。実務では GmailApp を使うのがおすすめです。
2つ目は try-catch でエラーハンドリングをしている点です。メールアドレスが不正だったり、送信上限に達した場合にスクリプト全体が止まるのを防ぎます。エラーが起きた行にはE列に「エラー」と記録されるので、後から確認できます。
3つ目はE列に「送信済み」フラグを記録している点です。これがないと、スクリプトを誤って2回実行した場合に二重送信が発生します。本番運用では、送信前にE列が空かどうかをチェックする条件を追加するとより安全です。
ステップ3:実行と承認
「▶ 実行」ボタンを押すと、初回は承認ダイアログが表示されます。GASがGmailにアクセスする許可を求めているので、「許可」をクリックしてください。承認の詳しい手順はGAS入門ガイドに記載しています。
実行が完了したら、Gmailの「送信済み」フォルダを確認してください。スプレッドシートの各行に対応するメールが送信されているはずです。
ステップ4:トリガーで定期実行する
「毎朝8時に自動送信したい」場合は、GASのトリガー機能を使います。
GASエディタの左メニューにある時計アイコン(トリガー)をクリックし、「トリガーを追加」を押します。
設定項目は以下の通りです。実行する関数として sendEmailsFromSheet を選択し、イベントのソースを「時間主導型」にし、時間ベースのトリガーのタイプを「日付ベースのタイマー」、時刻を「午前8時〜9時」に設定して保存します。
これで、毎朝8時台にスクリプトが自動実行されます。
知っておくべき送信上限
無料のGoogleアカウント(@gmail.com)は1日100通、Google Workspaceアカウントは1日1,500通が上限です。この上限はGmailの通常送信と合算でカウントされるので注意してください。
上限を超えると Service invoked too many times for one day: email というエラーが出ます。大量送信が必要な場合は、処理を複数日に分割するか、専用のメール配信サービスの利用を検討してください。
GAIDEでやるとどうなるか
ここまでの手順を、GAIDEを使って実現すると以下のようになります。
GAIDEの入力欄に「スプレッドシートのA列に名前、B列にメールアドレス、C列に件名、D列に本文が入っています。各行のメールアドレスにGmailを送信して、E列に送信済みフラグを立ててください」と入力します。
要件が不明な場合はさらにヒアリングをしてくれます。ヒアリングに返信するとすぐにAIがコードを生成されました。
コードの内容を自分で理解しなくても動かせますが、上で解説した送信上限やエラーハンドリングの知識は持っておくと安心です。
まとめ
GASでスプレッドシートからメールを自動送信するには、GmailApp.sendEmail() を使います。送信済みフラグの記録とエラーハンドリングを入れることで、実務で安全に使える仕組みになります。トリガーを設定すれば毎朝の定期送信も自動化できます。無料アカウントは1日100通の上限があるので、大量送信の場合は注意してください。
この自動化、GAIDEなら3分で実現できます
AIに話しかけるだけでGASコードを自動生成。プログラミング知識は不要です。
ログイン不要・クレジットカード不要
Seaside Lab
AIとWebで、もっと便利に