はじめに
業務やプライベートで定期的に同じような内容のメールを送る必要があるケースは少なくありません。例えば、週次レポートの送信、イベント参加者へのリマインダー、定期的な情報提供など、こうした繰り返し作業を手動で行うのは時間の無駄です。
今回は、Google Apps Script(GAS)を使って、定期的なメール送信を自動化する方法をご紹介します。プログラミング初心者の方でもコピー&ペーストで簡単に実装できるシンプルなスクリプトから始め、少しずつカスタマイズしていく形式で解説していきます。
必要なもの
- Googleアカウント
- Gmailアドレス
- 基本的なスプレッドシートの操作知識(初心者レベルでOK)
全体の流れ
- メール送信先情報をスプレッドシートで管理
- GASでメール送信スクリプトを作成
- トリガーを設定して定期実行
- カスタマイズと応用例
1. メール送信先情報をスプレッドシートで管理
まずは、送信先の情報を管理するためのスプレッドシートを作成します。
- Google スプレッドシートにアクセスして新規シートを作成
- シートに以下のような列を設定します:
- A列:メールアドレス
- B列:氏名
- C列:件名
- D列:メッセージ(本文)
- E列:最終送信日(空白)
以下のようなイメージになります:
メールアドレス | 氏名 | 件名 | メッセージ | 最終送信日 |
---|---|---|---|---|
test1@example.com | 山田太郎 | 週次レポートのお知らせ | 山田様<br><br>お疲れ様です。<br>週次レポートを送付いたします。 | |
test2@example.com | 佐藤花子 | イベント参加確認 | 佐藤様<br><br>お世話になっております。<br>来週のイベント参加確認のご連絡です。 |
必要な情報を入力したら、このスプレッドシートを保存します。
2. GASでメール送信スクリプトを作成
次に、Google Apps Script(GAS)を使ってメール送信のスクリプトを作成します。
- スプレッドシートの「拡張機能」>「Apps Script」をクリック
- 新しいスクリプトエディタが開くので、デフォルトのコードを以下のコードに置き換えます:
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);
}
- 「保存」ボタンをクリックしてスクリプトを保存します(任意の名前で構いません)
3. トリガーを設定して定期実行
スクリプトを定期的に実行するためのトリガーを設定します。
- スクリプトエディタの左側メニューから「トリガー」をクリックします
- 「トリガーを追加」ボタンをクリックします
- 以下のように設定します:
- 実行する関数:
sendScheduledEmails
- 実行するデプロイ:Head
- イベントのソース:「時間主導型」
- 時間ベースのトリガーのタイプ:日付ベースのタイマー(毎日、毎週、毎月など希望の頻度を選択)
- 時刻:希望の時間を選択
- 失敗時の通知:通知を受け取るメールアドレスを設定
- 実行する関数:
- 「保存」をクリックしてトリガーを設定完了します
これで設定した時間に自動的にメールが送信されるようになります。
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通程度)
- 大量のメール送信はスパムと見なされる可能性があるため注意しましょう
- パスワードなどの機密情報はスプレッドシートに記載しないようにしましょう
- 重要なメールは自動送信前に内容を確認することをおすすめします
コメント