勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

GASを利用してGmailに届いたメール内容をGoogleスプレッドシートに記入する方法

  Google Apps Script Google

WordPressのContact Form7から送信した内容をGmailで受け取り「受信日時」「送信メールアドレス」「件名」「本文」をGoogleスプレッドシートに記入したい。Google Apps Scriptと連携させることで容易に対応できそう。以下に実装方法をメモ。

 

スプレッドシートの準備

以下のように1行目に項目名を追記しておく。

 

Contact Form7の準備

題名(メールの件名)を以下のように設定しておく。

【GASテスト】問い合わせ通知

尚、今回は実験も兼ねているのでContact Form7を利用しているが、PHPで作成したフォームの場合なども題名を分かりやすいものに設定しておくとよい。

 

GAS

ソースコード

function getMail(){

    //スプレッドシートの読み込み
    const sheet = SpreadsheetApp.getActiveSheet();

    //読み込んだシートの最終行を取得する
    const last = sheet.getLastRow();

    //シートが未記入の場合
    if( last == 1 ){

        //昨日分のタイムススタンプを取得
        var last_date = parseInt(((new Date()).getTime() - 1 * 60 * 60 * 1000) / 1000);
    }else{

        //最新データに+1したタイムスタンプを取得
        var last_date = new Date(sheet.getRange(`A${last}`).getValue());
        last_date = parseInt(last_date.getTime()) / 1000 + 1;
    }

    //件名を指定して検索
    const query = `after:${last_date} subject: 【GASテスト】問い合わせ通知`;

    //開始行
    const start = 0;

    //終了行
    const max = 10;

    //メールの検索
    const threads = GmailApp.search(query, start, max);

    const mail_data = [];

    //メールの取得
    const messagesForThreads = GmailApp.getMessagesForThreads(threads);

    for(const messages of messagesForThreads){
        const message = messages[0];
        const record = [
            message.getDate(),
            message.getFrom(),
            message.getSubject(),
            message.getPlainBody().slice(0,200)
        ];
        mail_data.push(record);
    }

    if(mail_data.length > 0){
        SpreadsheetApp.getActiveSheet().getRange((last + 1), 1, mail_data.length, mail_data[0].length).setValues(mail_data);
    }
}

解説等

検索条件部分

件名が「【GASテスト】問い合わせ通知」且つタイムスタンプを指定し検索している。

尚、リファレンスではafter / beforeは年月日指定のみ表記されており日時指定は表記されていないが、こちらのサイトによるとUNIXタイムスタンプで日時も指定できるとのこと。

注意点

以前にも書いたがsearch時の上限に気を付けること。

取得したデータを上の行に追記していきたい場合

上記のソースコードだと取得したデータはシートの下に追記されていく。これを逆にしたい(上の方に追記していきたい)場合は以下部分を変更すること。

#変更前
SpreadsheetApp.getActiveSheet().getRange((last + 1), 1, mail_data.length, mail_data[0].length).setValues(mail_data);

#変更後
SpreadsheetApp.getActiveSheet().insertRows(2, mail_data.length);
SpreadsheetApp.getActiveSheet().getRange(2, 1, mail_data.length, mail_data[0].length).setValues(mail_data);

insertRowsで更新データ分の行を2行目以降に挿入し、挿入した行にデータを書き込むという形。

 - Google Apps Script Google

  関連記事

GASでNintendo Storeをチェックし指定したソフトが〇円以下の際に通知する方法

Google Apps Scriptを利用してNintendo Storeをスク ...

GASで「小説家になろう」サイトの更新通知をLINEに送る方法

Google Apps Scriptの勉強として「小説家になろう」サイトの特定小 ...

GASとDrive APIを組み合わせて画像やPDFファイルをOCR処理する方法

Googleドライブに保存した画像やPDFファイルをOCR処理し、ファイル内のテ ...

GASとGmailを連携させて受信メール検索及びメール送信

Google Apps ScriptとGmailを連携させてみたい。「未読かつ特 ...

GASで特定サイトにログインした後にスクレイピングを行う方法

Google Apps Scriptの勉強として特定サイトにログインし、その後に ...