Google Apps Scriptを使ってGmailの「From(差出人)」、「日時」、「本文」などの情報をGoogleスプレッドシートに自動で記録することを試してみました。
まずは、次のようなステップで行われます。
Google Apps Scriptプロジェクトの作成
まず、Googleスプレッドシート内で新しいスクリプトを作成します。
Gmail APIの活用
次に、Gmail APIを通じてメールを読み込みます。
Google Apps ScriptはGmailサービスをサポートしているため、これは比較的簡単です。
メールデータの取得
特定の条件でメールを検索し、必要なデータ(差出人、日時、本文)を取得します。
スプレッドシートへのデータ書き込み
最後に、取得したデータをスプレッドシートに記録します。
以下に、これらのステップを実行するサンプルコードを記載します。
このコードは、最新の5件のメールから必要な情報を取得し、それをスプレッドシートに記録する処理を実行できます。
function importEmailsToSheet() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var threads = GmailApp.getInboxThreads(0, 5);
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var from = message.getFrom();
var date = message.getDate();
var body = message.getPlainBody();
sheet.appendRow([from, date, body]);
}
}
}
このコードを実行する時に、スプレッドシートへのアクセス権限を設定する必要があります。 また、より複雑なフィルタリングやデータ処理が必要な場合は、このスクリプトをカスタマイズしてください。
例えば、特定の文字列が件名に含まれているメールのみを対象にしたい場合、以下のようにGmailApp.search メソッドを使用して条件に合うメールを検索し、必要な情報を取得することができます。
function importEmailsWithBulletedListAndOptionalTitleFromSpecificSender() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var subject = 'YourSubject'; // 件名に含まれる検索したい文字列
var startDate = 'startYYYY/MM/DD'; // 検索を開始する日付
var endDate = 'endYYYY/MM/DD'; // 検索を終了する日付
var specificSender = 'sample@example.com'; // 特定の差出人のメールアドレス
var titleMarker = '#'; // タイトルのマーカー
var bulletMarker = '-'; // 箇条書きのマーカー
var replyMarker = '>'; // 返信のマーカー
var signatureKeywords = ["Best regards,", "Sincerely,", "Regards,", "-----"]; // 署名を示すキーワード
var sortAscending = true; // 昇順に並び替える場合はtrue、降順はfalse
var query = 'from:' + specificSender + ' subject:' + subject + ' after:' + startDate + ' before:' + endDate;
var threads = GmailApp.search(query);
var requiredRows = threads.reduce(function(count, thread) {
return count + thread.getMessages().length;
}, 0); // 書き込む必要がある行数を計算 スプレッドシート行数制限(5万行)
// 既存データの最終行の位置を取得
var lastFilledRow = sheet.getLastRow();
// 必要な行数が現在の行数を超える場合、行を追加する
var totalRowsNeeded = lastFilledRow + requiredRows;
var currentRowCount = sheet.getMaxRows();
if (totalRowsNeeded > currentRowCount) {
sheet.insertRowsAfter(currentRowCount, totalRowsNeeded - currentRowCount);
}
// 以下、メールの処理とスプレッドシートへのデータ書き込み
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
var bodyLines = message.getPlainBody().split('\n');
var bulletList = ''; // 箇条書きのセクション
var bodyText = ''; // その他の本文
var inTitleSection = false;
for (var k = 0; k < bodyLines.length; k++) {
var line = bodyLines[k].trim();
var isSignatureLine = signatureKeywords.some(keyword => line.startsWith(keyword));
if (isSignatureLine) {
break; // 署名の開始を検出したら、残りの行は無視する
}
if (line.startsWith(replyMarker)) {
continue;
}
if (titleMarker && line.startsWith(titleMarker)) {
bulletList += line + '\n';
inTitleSection = true;
} else if (bulletMarker && line.startsWith(bulletMarker)) {
bulletList += line + '\n';
} else {
if (inTitleSection) {
inTitleSection = false;
} else {
bodyText += line + '\n';
}
}
}
sheet.appendRow([
message.getFrom(), // 差出人
message.getDate(), // 日付
message.getSubject(), // 件名
bodyText, // 本文
bulletList // 箇条書き
]);
}
}
// 日付列を基にして並び替え
var lastRow = sheet.getLastRow();
if (lastRow > 1) {
var range = sheet.getRange(1, 1, lastRow, sheet.getLastColumn()); // 1行目から始める
range.sort({column: 2, ascending: sortAscending}); // 2列目(日付)を基に並び替え
}
}
このサンプルでは、「YourSubject」という件名を持つメールを検索し、その差出人、日時、本文をスプレッドシートに取り込んでいます。 実際の使用には、検索したい具体的な文字列にYourSubjectを置き換えてください。
このように、Google Apps Scriptを利用すれば、Gmailのデータを効率的に管理し、業務の自動化を実現できます。 ただし、取得する最大件数に制限があるようです。 ここでは詳しく解説しませんが、1000件程度が限界のようです。
この記事があなたのGoogle Apps Scriptに関する知識を深める手助けができたらと願います。