ADVERTISEMENT

【Googleスプレッドシート】Gmailの受信メールをスプレッドシートに記録!ラベル別の自動転送

【Googleスプレッドシート】Gmailの受信メールをスプレッドシートに記録!ラベル別の自動転送
🛡️ 超解決

Gmailの受信メールをラベルごとに自動でスプレッドシートに記録したいと思ったことはありませんか。例えば、顧客からの問い合わせや注文メールをラベルで分類し、別々のシートに転送できれば、手作業の転記やコピペから解放されます。この記事では、Gmailのフィルタ機能とGoogle Apps Scriptを組み合わせて、ラベル別に受信メールをスプレッドシートに自動転送する方法を手順を追って解説します。

【要点】Gmailのラベル別に受信メールをスプレッドシートへ自動記録する方法

  • Gmailフィルタでラベルを自動付与: 送信者や件名などの条件に基づいて、受信メールに任意のラベルを自動で付ける設定を行います。
  • Apps Scriptでラベルごとにメールを抽出: 指定したラベルの未読メールを取得し、スプレッドシートに追記するスクリプトを作成します。
  • タイマートリガーで定期的に実行: スクリプトを1分〜1時間おきに自動実行するよう設定し、リアルタイムに近い記録を実現します。

ADVERTISEMENT

ラベル別自動転送の仕組みとメリット

Gmailにはメールを他のアドレスに転送する標準機能がありますが、ラベルで転送先を分けることはできません。また、スプレッドシートに直接書き込む機能もありません。そこで、Gmailのフィルタで受信メールにラベルを自動付与し、そのラベルをキーにしてGoogle Apps Scriptで必要なメールだけをスプレッドシートに書き込む仕組みを使います。この方法なら、ラベルごとにシートを分けて管理できるため、問い合わせ種別やプロジェクト単位での記録が容易になります。

Gmailフィルタでラベルを自動付与する手順

最初に、受信メールに自動でラベルを付けるフィルタを作成します。ここでは例として、送信者アドレスに「@example.com」を含むメールに「顧客問い合わせ」ラベルを付ける設定を説明します。

  1. Gmailでフィルタを作成する
    Gmailの検索ボックス横の下矢印アイコンをクリックし、詳細検索を開きます。「送信者」欄に「@example.com」と入力し、下部の「この検索条件でフィルタを作成」をクリックします。
  2. ラベルの選択とフィルタの保存
    フィルタ設定画面で「ラベルを付ける」にチェックを入れ、プルダウンから既存のラベルを選択するか「新しいラベル」をクリックして「顧客問い合わせ」を作成します。「フィルタを作成」ボタンを押して保存します。
  3. 既存メールにも適用する(必要に応じて)
    作成直後に「〇件の一致するメールにもフィルタを適用」にチェックを入れると、過去の該当メールにもラベルが付きます。

Apps Scriptでラベル別にスプレッドシートへ記録する手順

次に、指定したラベルの未読メールを取得し、スプレッドシートに書き込むGoogle Apps Scriptを作成します。以下のコードは「顧客問い合わせ」ラベルを対象としています。

  1. スプレッドシートを準備する
    転送先となるスプレッドシートを新規作成し、シート名を「顧客問い合わせ」に変更します。1行目に見出し(日時、送信者、件名、本文の抜粋)を入力しておきます。
  2. スクリプトエディタを開く
    スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択し、スクリプトエディタを開きます。
  3. スクリプトコードを記述する
    初期コードをすべて削除し、以下のコードを貼り付けます。
    function fetchGmailToSheet() {
      var label = GmailApp.getUserLabelByName('顧客問い合わせ');
      var threads = label.getThreads();
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('顧客問い合わせ');
      threads.forEach(function(thread) {
        var messages = thread.getMessages();
        messages.forEach(function(message) {
          if (message.isUnread()) {
            var row = [message.getDate(), message.getFrom(), message.getSubject(), message.getPlainBody().substring(0, 100)];
            sheet.appendRow(row);
            message.markRead();
          }
        });
      });
    }
  4. スクリプトを保存して実行する
    プロジェクト名を適宜入力し、保存アイコンをクリックします。初回実行時には承認が必要です。メニューの「実行」→「関数を実行」→「fetchGmailToSheet」を選び、権限を承認します。正常に動作すれば、シートに該当メールが追加されます。

ADVERTISEMENT

トリガーを設定して定期的に自動実行する

スクリプトを手動で実行するだけでは自動化できません。トリガーを設定して定期的に実行させます。

  1. トリガー画面を開く
    スクリプトエディタの左メニューから「トリガー」(時計アイコン)をクリックします。
  2. トリガーを追加する
    右下の「トリガーを追加」をクリックし、以下の設定を行います。
    ・実行する関数: fetchGmailToSheet
    ・時間ベースのトリガー: 時間ベース
    ・時間の間隔: 1分ごと(または任意の間隔)
    「保存」をクリックします。
  3. 動作確認
    トリガーが正しく設定されると、指定間隔でスクリプトが自動実行され、新着メールがスプレッドシートに記録されます。

注意点とよくあるトラブル

スクリプトの実行時間制限に注意する

Apps Scriptの実行時間は1回あたり最大6分です。大量の未読メールがある場合は、一度に処理しきれずタイムアウトする可能性があります。その場合は、トリガーの間隔を短くするか、処理対象を最新のスレッドのみに制限するコードに変更します。

ラベル名が正しくないと動作しない

スクリプト内のラベル名はGmail上のラベル名と完全に一致させる必要があります。大文字小文字やスペースも区別されます。ラベル名を変更した場合はスクリプトも修正してください。

メールの重複記録を防ぐ方法

未読フラグで処理済みを管理していますが、万が一未読が解除されないと重複記録が発生します。より堅牢にするには、メールのメッセージID(message.getId())をシートに保存し、次回実行時に重複チェックを行う方法がおすすめです。

各方法の比較

方法 ラベル別転送 自動化レベル 難易度
Gmail転送+手動コピー 不可
Apps Script 可能
サードパーティサービス(Zapierなど) 可能(有料)

ラベル別の自動転送を実現するには、Apps Scriptかサードパーティサービスが必須です。無料で柔軟なカスタマイズを求めるなら、Apps Scriptが最適です。ただし、スクリプトのメンテナンスが必要になる点は理解しておきましょう。

まとめ

この記事では、Gmailフィルタでラベルを自動付与し、Apps Scriptでラベルごとにスプレッドシートへメールを転送する方法を解説しました。これにより、顧客問い合わせや注文メールなどを自動で整理し、業務の効率化が期待できます。次は、転送先のシートを複数用意してラベルごとに別シートに記録する応用や、メール本文の特定キーワードを抽出するカスタマイズにも挑戦してみてください。ラベル名を配列で管理すれば、さらに多くのラベルに対応できるようになります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。