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日にリマインダーを送る、 といった定期送信を設定できます。
トリガーの設定方法
- GASエディタの左側メニューから「トリガー」(時計アイコン)をクリック
- 「トリガーを追加」ボタンをクリック
- 実行する関数を選択
- イベントのソースで「時間主導型」を選択
- 時間ベースのトリガーのタイプを選択(毎日、毎週、毎月など)
- 実行する時間帯を設定
- 「保存」をクリック
コードでトリガーを設定することもできます。
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
AIとWeb技術を活用したサービス開発を行っています。