GASで未読メールを取得して処理するスクリプト

先生

Gmailの未読メール処理をGASで自動化!業務効率を劇的に向上させるテクニックを伝授します。

GASで未読メールを取得する基本

GmailをGAS(Google Apps Script)で操作すると、メールの自動処理が非常に簡単になります。特に、未読メールの取得は、タスク管理や通知システムなど、様々な応用が可能です。この記事では、GASを使ってGmailの未読メールを取得し、処理する基本的なスクリプトを紹介します。

まず、GASエディタを開き、新しいスクリプトを作成します。GASエディタは、Google Workspaceのアプリからアクセスできます。

次に、以下のコードを記述します。このコードは、Gmailの未読スレッドを取得し、その件名と送信者を表示します。

function getUnreadEmails() {
  var threads = GmailApp.search('is:unread');
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    var latestMessage = messages[messages.length - 1];
    Logger.log('件名: ' + latestMessage.getSubject());
    Logger.log('送信者: ' + latestMessage.getFrom());
  }
}

このスクリプトを保存し、実行します。初回実行時には、GASにGmailへのアクセス許可を与える必要があります。

スクリプトを実行すると、ログに未読メールの件名と送信者が表示されます。GmailApp.search('is:unread') が未読メールを検索する部分です。Logger.log() は、GASのログに出力するための関数です。

未読メールの応用的な処理

未読メールを取得するだけでなく、さらに様々な処理を行うことができます。例えば、特定のキーワードを含むメールを抽出し、スプレッドシートに記録したり、特定の送信者からのメールを自動的にアーカイブしたりすることも可能です。

以下の例では、特定のキーワードを含む未読メールをスプレッドシートに記録します。

function logEmailsToSheet() {
  var threads = GmailApp.search('is:unread subject:"重要"');
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    var latestMessage = messages[messages.length - 1];
    var subject = latestMessage.getSubject();
    var from = latestMessage.getFrom();
    
    sheet.appendRow([subject, from, new Date()]);
    threads[i].markRead(); //メールを既読にする
  }
}

このスクリプトでは、GmailApp.search('is:unread subject:"重要"') で、件名に「重要」というキーワードを含む未読メールを検索しています。取得したメールの件名、送信者、受信日時をスプレッドシートに記録し、threads[i].markRead()でメールを既読にしています。

また、threads[i].markRead() を削除すれば、メールを未読のままにしておくことも可能です。

さらに、特定の送信者からのメールを自動的にアーカイブするには、以下のようなスクリプトを使用します。

function archiveSenderEmails() {
  var threads = GmailApp.search('from:"example@example.com" is:unread');
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToArchive();
  }
}

このスクリプトでは、GmailApp.search('from:"example@example.com" is:unread') で、example@example.comからの未読メールを検索し、threads[i].moveToArchive() でアーカイブしています。メールアドレスを書き換えて使用してください。

トリガー設定と注意点

GASで定期的にメールを処理するには、トリガーを設定する必要があります。GASエディタの「トリガー」アイコンをクリックし、時間主導型トリガーを設定することで、定期的にスクリプトを実行できます。

例えば、1時間ごとに未読メールをチェックするトリガーを設定できます。

GASでGmailを操作する際には、Gmail APIの使用制限に注意が必要です。短時間に大量のメールを処理すると、APIの使用制限に達する可能性があります。処理するメールの件数を制限したり、処理間隔を調整したりすることで、制限を回避できます。

また、メールの内容によっては、個人情報が含まれる場合があります。GASでメールを処理する際には、プライバシーに配慮し、適切なセキュリティ対策を講じる必要があります。

エラーハンドリングとデバッグ

GASスクリプトのエラーハンドリングは重要です。try-catch文を使用して、予期せぬエラーが発生した場合でも、スクリプトが停止しないように処理できます。

function tryCatchExample() {
  try {
    // エラーが発生する可能性のあるコード
    GmailApp.search('from:"nonexistentemail@example.com"');
  } catch (e) {
    // エラーが発生した場合の処理
    Logger.log('エラーが発生しました: ' + e);
  }
}

デバッグには、Logger.log() が役立ちます。変数の値や処理の経過をログに出力することで、問題箇所を特定しやすくなります。

GASエディタの「実行」メニューから「デバッグ」を選択すると、ステップ実行やブレークポイントの設定も可能です。

参考リンク

まとめ

GASを使ってGmailの未読メールを取得し、処理するスクリプトは、様々な業務を自動化する上で非常に強力なツールです。この記事で紹介した基本を理解し、応用することで、より効率的なメール処理システムを構築できます。ぜひ、GASを活用して、日々の業務を効率化してみてください。