Gmailのメール振り分けをGASでカスタマイズ

Gmailのメール振り分けをGASでカスタマイズ
はじめに:メール整理は経営者の時間節約の肝
どうも、GASおじです。中小企業の経営者やフリーランスの皆さん、毎日溜まるGmailのメール、うまく整理できていますか?メールの振り分けは地味だけど時間を取られがち。そこでGoogle Apps Script(以下GAS)を使って、自動でメールをスッキリ振り分ける方法をお伝えします。
GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えます(ただしApps Scriptのquota・実行上限あり)。コストをかけずに効率化したい方にはピッタリです。
Gmail振り分けにGASを使うメリットと初期設定
Gmailにはフィルタ機能がありますが、複雑な条件や複数のラベル付け、バックアップを考慮するとGASのほうが柔軟です。GASならメール本文や添付ファイルの内容も判断材料にできるし、処理結果は新しい日時付きシートに書き出すので、既存データを消す心配なし。
必要な権限
- Gmailの読み取りと管理権限
- Googleスプレッドシートの編集権限(結果保存用)
初期設定
- Googleスプレッドシートを用意します(振り分け結果のバックアップ用)。
- GASエディタを開き、スクリプトを作成。
- installable triggerで定期実行設定(例:1時間ごと)を行います。
個人情報の取扱い
メール内容はスプレッドシートにバックアップされるため、アクセス権限の管理を徹底してください。スプレッドシート共有範囲は必要最小限に。
復元手順
もし誤って振り分け設定を変更しても、バックアップシートの内容から元のメールを再確認可能。メール自体はGmailに残りますので安心です。
コード例:メールの件名キーワードと送信者で振り分け&バックアップ
以下は例として、件名に「見積」か「請求」が含まれるメールを特定ラベルに振り分け、処理結果を日時付き新規シートに書き出すコードです。既存シートのデータは消さず、新規で保存します。入力検証も簡単に入れています。
function filterAndBackupEmails() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const now = new Date();
const sheetName = Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyyMMdd_HHmmss");
const sheet = ss.insertSheet(sheetName);
// ヘッダー設定
const headers = ["メールID", "送信者", "件名", "受信日時", "ラベル付与結果"];
sheet.appendRow(headers);
// 振り分けキーワードとラベル名の対応
const filterRules = [
{ keyword: "見積", labelName: "見積り案件" },
{ keyword: "請求", labelName: "請求書" }
];
// Gmailの未読メールを取得(必要に応じて取得条件を変更)
const threads = GmailApp.search('is:inbox is:unread', 0, 50);
if (!threads.length) {
Logger.log("対象メールなし");
return;
}
// メール処理用配列
const rows = [];
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const subject = message.getSubject() || "";
const from = message.getFrom() || "";
const id = message.getId();
const date = message.getDate();
// 入力検証: 件名と送信者があるか
if (!subject || !from) return;
// キーワードに基づくラベル付け判定
let labelApplied = "なし";
for (const rule of filterRules) {
if (subject.indexOf(rule.keyword) !== -1) {
const label = GmailApp.getUserLabelByName(rule.labelName) || GmailApp.createLabel(rule.labelName);
thread.addLabel(label);
labelApplied = rule.labelName;
break;
}
}
rows.push([id, from, subject, date, labelApplied]);
});
});
// バッチ書き込み(ヘッダー除く)
if (rows.length > 0) {
sheet.getRange(2, 1, rows.length, headers.length).setValues(rows);
}
}
ポイント解説
- 新規シート作成:既存シートを消さず、日時付き新規シートに結果を保存。
- 入力検証:件名と送信者が空の場合は処理スキップ。
- バッチ書き込み:配列にまとめて一括書き込みで効率化。
- ラベルの作成・取得:存在しなければ自動作成。
- 処理対象制限:上限50件の未読メールに限定(必要に応じて調整)。
コスト削減の仮定と計算例
例えば、1日50通のメール振り分け作業にかかる手動時間が1通あたり20秒だったとします。
- 1日の手動時間:50通 × 20秒 = 1000秒(約16.7分)
- 1ヶ月(20営業日)では:約16.7分 × 20日 = 約333分 ≒ 5.5時間
- 時給2,500円換算で:5.5時間 × 2,500円 = 13,750円
GASの自動化でこの時間を半分に削減できた場合、月6,875円の時間コスト削減が見込めます(あくまで仮定です)。もちろん、Googleアカウントの利用枠内で追加の専用SaaS料金なし、Apps Scriptのquota・実行上限はありますがランニングコストはほぼゼロ。
installable trigger設定例
GASのエディタで「編集」→「現在のプロジェクトのトリガー」から新規トリガーを作成し、
- 実行する関数:
filterAndBackupEmails - イベントのソース:時間主導型
- 時間ベースのトリガー:1時間ごと(または任意間隔)
と設定してください。これで定期的に振り分け処理が自動実行されます。
まとめとメンバーシップ案内
GASを活用したGmailのメール振り分けは、既存データを消さずに安全にバックアップを取りつつ、業務効率化とコスト削減を狙えます。特に中小企業やフリーランスの方には、追加SaaS料金なしでできる点が魅力です。
もっとGASで業務改善したい方は、ぜひこちらのメンバーシップもチェックしてみてください。