資料ダウンロードやお問い合わせなどのフォーム送信をメールに飛ばしている方も多いのではないでしょうか?
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のメールを重複除外して取得することができます。
以下が実現可能です。
- フォームで取得しているリードデータやマイクロコンバージョンの集計がスプレッドシートでできる
- 重複を除いたユニークなメールだけを取得するので、トリガー実行で新しく届いたメールだけを追記可能
日々のマーケティング活動にお役立てください!