[GAS] GASで定期的にメール送信を自動化しよう

GAS
スポンサーリンク

はじめに

業務やプライベートで定期的に同じような内容のメールを送る必要があるケースは少なくありません。例えば、週次レポートの送信、イベント参加者へのリマインダー、定期的な情報提供など、こうした繰り返し作業を手動で行うのは時間の無駄です。

今回は、Google Apps Script(GAS)を使って、定期的なメール送信を自動化する方法をご紹介します。プログラミング初心者の方でもコピー&ペーストで簡単に実装できるシンプルなスクリプトから始め、少しずつカスタマイズしていく形式で解説していきます。

必要なもの

  • Googleアカウント
  • Gmailアドレス
  • 基本的なスプレッドシートの操作知識(初心者レベルでOK)



全体の流れ

  1. メール送信先情報をスプレッドシートで管理
  2. GASでメール送信スクリプトを作成
  3. トリガーを設定して定期実行
  4. カスタマイズと応用例

1. メール送信先情報をスプレッドシートで管理

まずは、送信先の情報を管理するためのスプレッドシートを作成します。

  1. Google スプレッドシートにアクセスして新規シートを作成
  2. シートに以下のような列を設定します:
    • A列:メールアドレス
    • B列:氏名
    • C列:件名
    • D列:メッセージ(本文)
    • E列:最終送信日(空白)

以下のようなイメージになります:

メールアドレス氏名件名メッセージ最終送信日
test1@example.com山田太郎週次レポートのお知らせ山田様<br><br>お疲れ様です。<br>週次レポートを送付いたします。
test2@example.com佐藤花子イベント参加確認佐藤様<br><br>お世話になっております。<br>来週のイベント参加確認のご連絡です。

必要な情報を入力したら、このスプレッドシートを保存します。

2. GASでメール送信スクリプトを作成

次に、Google Apps Script(GAS)を使ってメール送信のスクリプトを作成します。

  1. スプレッドシートの「拡張機能」>「Apps Script」をクリック
  2. 新しいスクリプトエディタが開くので、デフォルトのコードを以下のコードに置き換えます:
function sendScheduledEmails() {
  // スプレッドシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();
  
  // 現在の日付を取得
  var today = new Date();
  var formattedDate = Utilities.formatDate(today, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
  
  // ヘッダー行をスキップするために1から開始
  for (var i = 1; i < data.length; i++) {
    var row = data[i];
    var emailAddress = row[0];  // A列:メールアドレス
    var name = row[1];          // B列:氏名
    var subject = row[2];       // C列:件名
    var message = row[3];       // D列:メッセージ
    var lastSent = row[4];      // E列:最終送信日
    
    // メールアドレスが有効かチェック
    if (emailAddress && validateEmail(emailAddress)) {
      try {
        // メール送信
        GmailApp.sendEmail(
          emailAddress,
          subject,
          message,
          {name: '田中太郎'} // 送信者名
        );
        
        // 最終送信日を更新
        sheet.getRange(i + 1, 5).setValue(formattedDate);
        
        // 処理の間隔を空ける(Gmailの送信制限に引っかからないように)
        Utilities.sleep(1000);
        
        Logger.log('メール送信成功: ' + emailAddress);
      } catch (e) {
        Logger.log('メール送信エラー: ' + emailAddress + ', エラー: ' + e.toString());
      }
    }
  }
}

// メールアドレスの簡易バリデーション
function validateEmail(email) {
  var re = /\S+@\S+\.\S+/;
  return re.test(email);
}
  1. 「保存」ボタンをクリックしてスクリプトを保存します(任意の名前で構いません)

3. トリガーを設定して定期実行

スクリプトを定期的に実行するためのトリガーを設定します。

  1. スクリプトエディタの左側メニューから「トリガー」をクリックします
  2. 「トリガーを追加」ボタンをクリックします
  3. 以下のように設定します:
    • 実行する関数:sendScheduledEmails
    • 実行するデプロイ:Head
    • イベントのソース:「時間主導型」
    • 時間ベースのトリガーのタイプ:日付ベースのタイマー(毎日、毎週、毎月など希望の頻度を選択)
    • 時刻:希望の時間を選択
    • 失敗時の通知:通知を受け取るメールアドレスを設定
  4. 「保存」をクリックしてトリガーを設定完了します

これで設定した時間に自動的にメールが送信されるようになります。



4. カスタマイズと応用例

基本的な自動メール送信の仕組みができたら、様々な形でカスタマイズしてみましょう。

例1:HTMLフォーマットのメール送信

より見栄えの良いHTMLメールを送信したい場合は、以下のようにコードを修正します:

// メール送信部分を以下に変更
GmailApp.sendEmail(
  emailAddress,
  subject,
  message, 
  {
    name: '田中太郎',
    htmlBody: '<p>' + message.replace(/\n/g, '<br>') + '</p>'
  }
);

こうすれば、たとえばmessageが以下のような内容の場合

こんにちは、
お元気ですか?
よろしくお願いします。

表示される文面は以下のようになる

件名: [subjectの内容]

送信者: 田中太郎

本文:
こんにちは、
お元気ですか?
よろしくお願いします。


例2:添付ファイル付きメール送信

Google ドライブ上のファイルを添付して送信する場合:

// ファイルIDを指定(Google ドライブのファイルURLから取得できます)
var fileId = '1ABC123_your_file_id_here';
var file = DriveApp.getFileById(fileId);

GmailApp.sendEmail(
  emailAddress,
  subject,
  message,
  {
    name: '田中太郎',
    attachments: [file.getAs(MimeType.PDF)]  // PDFとして添付
  }
);

例3:条件付き送信

特定の条件を満たす場合のみメールを送信するようにカスタマイズ:

// 例:最終送信日から7日以上経過している場合のみ送信
if (!lastSent || (today - new Date(lastSent)) > (7 * 24 * 60 * 60 * 1000)) {
  // メール送信処理
  ...
}

例4:送信ログの記録

送信ログを別シートに記録する機能を追加:

function logEmailSent(emailAddress, subject, status) {
  var logSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('送信ログ');
  if (!logSheet) {
    // ログシートがなければ作成
    logSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('送信ログ');
    logSheet.appendRow(['日時', 'メールアドレス', '件名', 'ステータス']);
  }
  
  var now = new Date();
  var formattedDate = Utilities.formatDate(now, 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
  logSheet.appendRow([formattedDate, emailAddress, subject, status]);
}

// 送信成功時にログを記録
logEmailSent(emailAddress, subject, '成功');

// 送信失敗時にログを記録
logEmailSent(emailAddress, subject, 'エラー: ' + e.toString());

まとめ

Google Apps Script(GAS)を使った定期メール送信の自動化は、日常業務の効率化に大いに役立ちます。基本的なスクリプトをベースに、自分のニーズに合わせてカスタマイズすることで、より高度な自動化が可能になります。

ぜひ実際に試してみて、定型業務から解放されましょう!

注意点

  • Gmailでは1日あたりの送信制限があります(個人アカウントで1日100通程度)
  • 大量のメール送信はスパムと見なされる可能性があるため注意しましょう
  • パスワードなどの機密情報はスプレッドシートに記載しないようにしましょう
  • 重要なメールは自動送信前に内容を確認することをおすすめします

参考リンク

コメント

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