【GAS】Gmailの特定のメールを重複を除いてスプレッドシートに自動で取得する方法

デジタルマーケティング

資料ダウンロードやお問い合わせなどのフォーム送信をメールに飛ばしている方も多いのではないでしょうか?

GASを活用してGmailのデータをスプレッドシートで取得して集計すると手間が省けます。
しかし、メールを取得する際に重複を除く処理をしておかないと、トリガーが実行されるたびに同じメールが転記され続けてしまう問題があります。
重複を除いてユニークなメールだけを取得するにはひと工夫が必要です。

この記事では、GASを使って重複を除いたユニークなGmailのメールをスプレッドシートに自動転記する方法をお伝えします。
ご紹介するコードで、

  • フォームで取得しているリードデータやマイクロコンバージョンの集計がスプレッドシートでできる
  • 重複を除いたユニークなメールだけを取得するので、トリガー実行で新しく届いたメールだけを追記可能

になります!

 

重複を除いたGmailをスプレッドシートに転記する手順

GASコードをエディタにコピペする

実際のGASコードは以下になります。

function getMails() {
  const query = 'subject:xxxxx';  // xxxxxに取得したいメールタイトル(またはタイトルに含まれる文字列)を指定
  const start = 0;
  const max = 30;

  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName("xxx"); // シート名を指定
  const lastRow = sheet.getLastRow();
  const ids = sheet.getRange(2, 1, lastRow).getValues().flat(); // メールは2行目以降に転記

  let threads = GmailApp.search(query, start, max);
  let values = new Array();

  threads.forEach(function(thread) {
    let messages = thread.getMessages();
    messages.forEach(function(message) {
      let id = message.getId();

      if(!ids.includes(id)) {
        let datetime = message.getDate();
        let body = message.getPlainBody();

        values.push([id, datetime, body]);
      }
    });

    if(values.length > 0) {
      sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values);
    }
  });
}

 

threads.forEach() でGmail内のスレッドでまとめられた個別のメールをすべて取得します。
また、関数内の if(!ids.includes(id)) で、取得するメールIDが既に取得済みのメールIDに含まれていない場合にメールデータを取得する流れとなっています。

 

上記のGASコードを「拡張機能」から「Apps Script」を開き、「エディタ」に貼り付けます。

取得するメール件名・シート名を指定する

①コピペしたコードの「xxxxx」の部分を取得したいメールの件名、または件名に含まれる文字に変更
②「xxx」をメールを取得するシートの名前に変更

それぞれを該当コードの部分に入力します。

 

上記の例では、お問い合わせのメールを取得するために「subject:問い合わせ」と記述しました。

関数を実行する

実際に関数「getMails」を実行してみましょう。
該当の関数が選択された状態で「実行」をクリックしてください。

初回実行時は承認が必要ですので、承認を完了させます。

承認が完了すると、関数が実行されます。

うまくお問い合わせメールが取得できました!

重複を除いて取得するため、トリガーで定期的に実行しておけば、新しく届いたメールだけをシートに追記していくことができます。

注意点

転記先シートが空白だとエラーが発生する

ご紹介したコードを使用する際、転記先のシートが空白だと以下のように「The number of rows in the range must be at least 1.」エラーが出てしまいます。

転記先シートが空白の場合は、何か文字列を打った状態にして「getMails」を実行してみてください。

ヘッダー行は手動入力が必要

ヘッダー行(1行目)は、自動で取得はできないため、関数の実行前(または、実行後)に手動で入力する必要があります。

まとめ

ご紹介したコードでGmailのメールを重複除外して取得することができます。

以下が実現可能です。

  • フォームで取得しているリードデータやマイクロコンバージョンの集計がスプレッドシートでできる
  • 重複を除いたユニークなメールだけを取得するので、トリガー実行で新しく届いたメールだけを追記可能

日々のマーケティング活動にお役立てください!

タイトルとURLをコピーしました