function searchGmailAndSaveToFile() {
// 検索条件の設定
const startDate = new Date('2025-07-12');
const unixTime1 = startDate.getTime();
const startNum = Math.floor(unixTime1/1000)-32400;
const endDate = new Date('2025-07-13'); // 検索終了日時 (例: 2024年12月31日)
const unixTime2 = endDate.getTime();
const endNum = Math.floor(unixTime2/1000)-32400;
const subjectKeyword = '会議';
// 出力ファイルの設定
const fileName = `Gmail検索結果_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss')}.txt`;
let outputContent = ''; // ファイルに書き込む内容を蓄積する変数
// 日時をGmailのクエリ形式に変換
const formattedStartDate = startNum.toString();
const formattedEndDate = endNum.toString();
// 検索クエリの作成
const searchQuery = `after:${formattedStartDate} before:${formattedEndDate} subject:${subjectKeyword}`;
Logger.log(`検索クエリ: ${searchQuery}`);
outputContent += `検索クエリ: ${searchQuery}\n\n`;
// Gmailを検索
const threads = GmailApp.search(searchQuery);
if (threads.length === 0) {
Logger.log('該当するメールは見つかりませんでした。');
outputContent += '該当するメールは見つかりませんでした。\n';
} else {
Logger.log(`見つかったメールの数: ${threads.length}`);
outputContent += `見つかったメールの数: ${threads.length}\n\n`;
// 各スレッド(会話)を処理
threads.forEach(thread => {
const messages = thread.getMessages();
messages.forEach(message => {
const subject = message.getSubject();
const from = message.getFrom();
const date = message.getDate();
const body = message.getPlainBody();
const messageInfo = `-----------------------------------\n` +
`日時: ${date}\n` +
`件名: ${subject}\n` +
`送信元: ${from}\n` +
`メッセージID: ${message.getId()}\n` +
`本文:\n${body}\n`; // 本文全体をファイルに出力
Logger.log(messageInfo); // ログにも出力
outputContent += messageInfo + '\n'; // ファイル内容に蓄積
});
});
}
// Google Driveにテキストファイルを作成
try {
DriveApp.createFile(fileName, outputContent, MimeType.PLAIN_TEXT);
Logger.log(`ファイル "${fileName}" をGoogle Driveに作成しました。`);
} catch (e) {
Logger.log(`ファイルの作成中にエラーが発生しました: ${e.toString()}`);
}
}
概要
このGoogle Apps Script(GAS)コードは、Gmailから指定した条件に合致するメールを検索し、メールの詳細情報(件名、送信者、日時、本文)をテキストファイルとしてGoogle Driveに自動保存する機能を提供します。
主な機能
- 日時範囲指定: 特定の期間内のメールを検索
- 件名フィルタ: 件名に特定のキーワードを含むメールを抽出
- 詳細情報出力: メールの基本情報と本文全体を記録
- 自動ファイル生成: 検索結果をタイムスタンプ付きファイル名で保存
コードの詳細解析
1. 検索条件の設定
const startDate = new Date('2025-07-12');
const endDate = new Date('2025-07-13');
const subjectKeyword = '会議';
- 検索期間: 2025年7月12日( タイムゾーン : UTC+9時間 = 32400 で調整)
- 検索キーワード: 件名に「会議」を含むメール
2. Unix時間への変換処理
const unixTime1 = startDate.getTime(); const startNum = Math.floor(unixTime1/1000)-32400;
- JavaScriptの日付をUnix時間(秒)に変換
-32400は日本時間(JST)のタイムゾーン調整(UTC+9時間 = 32400秒)
3. ファイル名の動的生成
const fileName = `Gmail検索結果_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyyMMdd_HHmmss')}.txt`;
- 実行時の日時を使用して一意のファイル名を生成
- 形式例:
Gmail検索結果_20250724_143055.txt
4. Gmail検索クエリの構築
const searchQuery = `after:${formattedStartDate} before:${formattedEndDate} subject:${subjectKeyword}`;
- Gmailの高度な検索演算子を使用
after:とbefore:で日時範囲を指定subject:で件名検索を実行
5. メール情報の抽出と整形
各メールから以下の情報を抽出:
- 日時:
message.getDate() - 件名:
message.getSubject() - 送信者:
message.getFrom() - メッセージID:
message.getId() - 本文:
message.getPlainBody()(プレーンテキスト形式)
6. 出力形式
----------------------------------- 日時: [送信日時] 件名: [メールの件名] 送信元: [送信者のメールアドレス] メッセージID: [Gmail内部ID] 本文: [メール本文全体]
使用方法
1. 事前準備
- Google Apps Scriptプロジェクトを作成
- Gmailへのアクセス権限を付与
- Google Driveへの書き込み権限を確認
2. カスタマイズ可能な設定
- 検索期間:
startDateとendDateを変更 - 検索キーワード:
subjectKeywordを任意の文字列に変更 - ファイル名:
fileNameの命名規則を調整
3. 実行方法
- GASエディタで関数
searchGmailAndSaveToFile()を選択 - 実行ボタンをクリック
- 権限承認を行う(初回のみ)
- Google Driveに結果ファイルが自動保存される
注意事項とベストプラクティス
セキュリティ
- 権限スコープ: Gmail読み取りとDrive書き込み権限が必要
- データ取り扱い: メール本文が平文でファイルに保存されるため、機密情報に注意
パフォーマンス
- 実行時間制限: GASは6分の実行時間制限があるため、大量メール検索時は分割処理を検討
- APIクォータ: Gmail APIの呼び出し制限に注意
エラーハンドリング
try {
DriveApp.createFile(fileName, outputContent, MimeType.PLAIN_TEXT);
Logger.log(`ファイル "${fileName}" をGoogle Driveに作成しました。`);
} catch (e) {
Logger.log(`ファイルの作成中にエラーが発生しました: ${e.toString()}`);
}
- ファイル作成時のエラーを適切にキャッチ
- ログ出力でトラブルシューティングを支援
拡張可能性
機能追加の提案
- 添付ファイル処理: 添付ファイルの情報や保存機能
- CSV出力: 構造化データとしてCSV形式での出力
- メール分類: 送信者やラベル別の自動分類
- 定期実行: トリガー設定による自動実行
- 通知機能: 処理完了時のメール通知
検索条件の拡張例
// 複数キーワード検索
const searchQuery = `after:${startDate} before:${endDate} (subject:削除 OR subject:取消)`;
// 送信者指定
const searchQuery = `from:example@domain.com subject:${keyword}`;
// ラベル指定
const searchQuery = `label:重要 after:${startDate}`;
トラブルシューティング
よくある問題
- 権限エラー: Gmail/Drive APIの権限を再承認
- ファイル作成失敗: Drive容量不足やファイル名の文字制限を確認
- 検索結果が0件: 日時範囲やキーワードの設定を見直し
- タイムゾーンエラー:
-32400の調整値を環境に合わせて変更
このコードは、メールアーカイブやコンプライアンス対応、データ分析など様々な用途で活用できる実用的なツールです。