GAS入門 2025.09.02

GASでGmailを自動送信する方法
【定期レポートに最適】

1. はじめに

毎週のレポート送信、定期的なリマインダー、お礼メール... ルーティン化したメール送信作業に時間を取られていませんか?

GASを使えば、Gmailの送信を完全に自動化できます。 この記事では、基本的なメール送信から、スプレッドシートと連携した一斉送信、 定期送信の設定まで、詳しく解説します。

2. 基本的なメール送信

GASでメールを送信するには、GmailApp.sendEmail()メソッドを使用します。 まずは、最もシンプルなメール送信の例を見てみましょう。

function sendSimpleEmail() {
  // 宛先、件名、本文を指定してメール送信
  GmailApp.sendEmail(
    'recipient@example.com',  // 宛先
    'テストメールの件名',      // 件名
    'これはテストメールの本文です。'  // 本文
  );
  
  console.log('メールを送信しました');
}

このコードを実行すると、指定した宛先にメールが送信されます。 初回実行時は、Gmailへのアクセス権限を承認する必要があります。

オプションを指定する

CC、BCC、送信者名など、より詳細なオプションを指定することもできます。

function sendEmailWithOptions() {
  GmailApp.sendEmail(
    'recipient@example.com',
    '会議のお知らせ',
    '明日の会議についてご連絡します。',
    {
      cc: 'cc@example.com',           // CC
      bcc: 'bcc@example.com',         // BCC
      name: 'Seaside Lab',            // 送信者名
      replyTo: 'reply@example.com'    // 返信先
    }
  );
}

3. HTMLメールを送信する

装飾されたメールを送信したい場合は、HTMLメールが便利です。 htmlBodyオプションを使用します。

function sendHtmlEmail() {
  const htmlBody = `
    <div style="font-family: sans-serif; max-width: 600px; margin: 0 auto;">
      <h2 style="color: #3b82f6;">週次レポート</h2>
      <p>いつもお世話になっております。</p>
      <p>今週の活動レポートをお送りします。</p>
      
      <table style="width: 100%; border-collapse: collapse; margin: 20px 0;">
        <tr style="background: #f1f5f9;">
          <th style="padding: 12px; border: 1px solid #e2e8f0;">項目</th>
          <th style="padding: 12px; border: 1px solid #e2e8f0;">実績</th>
        </tr>
        <tr>
          <td style="padding: 12px; border: 1px solid #e2e8f0;">売上</td>
          <td style="padding: 12px; border: 1px solid #e2e8f0;">¥1,234,567</td>
        </tr>
        <tr>
          <td style="padding: 12px; border: 1px solid #e2e8f0;">件数</td>
          <td style="padding: 12px; border: 1px solid #e2e8f0;">45件</td>
        </tr>
      </table>
      
      <p>ご確認よろしくお願いいたします。</p>
    </div>
  `;
  
  GmailApp.sendEmail(
    'recipient@example.com',
    '【週次レポート】今週の活動報告',
    'HTMLメールに対応していない場合のテキスト本文',
    {
      htmlBody: htmlBody,
      name: 'レポート自動送信システム'
    }
  );
}

4. スプレッドシートと連携した一斉送信

実務でよく使うのが、スプレッドシートの宛先リストを元にした一斉送信です。 以下の例では、スプレッドシートに記載された複数の宛先に、 それぞれの名前を入れたパーソナライズされたメールを送信します。

まず、スプレッドシートを以下のように準備します:

  • A列:名前
  • B列:メールアドレス
  • C列:会社名
function sendBulkEmails() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const lastRow = sheet.getLastRow();
  
  // 2行目から最終行までのデータを取得(1行目はヘッダー)
  const data = sheet.getRange(2, 1, lastRow - 1, 3).getValues();
  
  data.forEach((row, index) => {
    const name = row[0];
    const email = row[1];
    const company = row[2];
    
    // メールアドレスが空の場合はスキップ
    if (!email) return;
    
    const subject = `【ご案内】新サービスのお知らせ`;
    const body = `${company}
${name} 様

いつもお世話になっております。
Seaside Labです。

この度、新サービスをリリースいたしましたので、ご案内申し上げます。

詳細は以下のURLよりご確認ください。
https://seaside-lab.com/

ご不明な点がございましたら、お気軽にお問い合わせください。

--
Seaside Lab
https://seaside-lab.com/
`;
    
    try {
      GmailApp.sendEmail(email, subject, body);
      console.log(`送信完了: ${name} (${email})`);
      
      // API制限を避けるため、少し待機
      Utilities.sleep(1000);
    } catch (error) {
      console.log(`送信エラー: ${name} (${email}) - ${error.message}`);
    }
  });
  
  console.log('一斉送信が完了しました');
}

⚠️ 注意:送信制限について

GASからのメール送信には、1日あたりの送信数に制限があります。 無料のGoogleアカウントでは100通/日、Google Workspaceでは1,500通/日程度が目安です。 大量送信の際は、制限に注意してください。

5. トリガーで定期送信を設定する

毎週月曜日の朝にレポートを送信する、毎月1日にリマインダーを送る、 といった定期送信を設定できます。

トリガーの設定方法

  1. GASエディタの左側メニューから「トリガー」(時計アイコン)をクリック
  2. 「トリガーを追加」ボタンをクリック
  3. 実行する関数を選択
  4. イベントのソースで「時間主導型」を選択
  5. 時間ベースのトリガーのタイプを選択(毎日、毎週、毎月など)
  6. 実行する時間帯を設定
  7. 「保存」をクリック

コードでトリガーを設定することもできます。

function createWeeklyTrigger() {
  // 既存のトリガーを削除
  const triggers = ScriptApp.getProjectTriggers();
  triggers.forEach(trigger => {
    if (trigger.getHandlerFunction() === 'sendWeeklyReport') {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  
  // 毎週月曜日の9時に実行するトリガーを作成
  ScriptApp.newTrigger('sendWeeklyReport')
    .timeBased()
    .onWeekDay(ScriptApp.WeekDay.MONDAY)
    .atHour(9)
    .create();
    
  console.log('週次トリガーを設定しました');
}

function sendWeeklyReport() {
  // ここにレポート送信の処理を書く
  const today = new Date();
  const subject = `【週次レポート】${Utilities.formatDate(today, 'JST', 'yyyy/MM/dd')}`;
  
  GmailApp.sendEmail(
    'manager@example.com',
    subject,
    '今週のレポートです。\n\n...'
  );
}

6. 注意点とベストプラクティス

テスト送信を忘れずに

本番運用の前に、必ず自分のメールアドレス宛にテスト送信を行いましょう。 件名や本文に誤りがないか、HTMLの表示が崩れていないかを確認します。

エラーハンドリングを入れる

一斉送信の場合、一部の送信でエラーが発生しても処理が止まらないよう、 try-catchでエラーハンドリングを入れましょう。

送信ログを残す

いつ、誰に、どんなメールを送ったかをスプレッドシートに記録しておくと、 後からの確認や問題発生時の調査に役立ちます。

function logEmailSent(email, subject, status) {
  const logSheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('送信ログ');
  
  logSheet.appendRow([
    new Date(),
    email,
    subject,
    status
  ]);
}

GASによるメール自動化は、一度設定すれば毎回の作業時間を大幅に削減できます。 ぜひ、日々の業務に取り入れてみてください。

Seaside Lab

Seaside Lab

AIとWeb技術を活用したサービス開発を行っています。

ブログ一覧へ戻る