【GAS】Gmailのメッセージから返信先とパーマリンクを取得する方法


mail

photo credit: Phil’s 1stPix We Deliver For You- Down on the Farm via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Gmailで届いた問い合わせフォームからのメールを収集するツールを作成しています。

前回の記事はこちらです。

【GAS】Gmailからメールを検索してスプレッドシートに書き出す方法
Gmailに届いたWordPressサイトからの問い合わせメールの分析を進めています。 今回はGoogle Apps ScriptでGmailから検索して取り出したメールたちをスプレッドシートに出力します。

Gmailのメッセージの内容をスプレッドシートに書き出す方法をお伝えしました。

今回は、この書き出しについてよりブラッシュアップしていきます。

Gmailのメッセージから返信先とパーマリンクを取得する方法です。

では、いってみましょう!

スポンサーリンク

前回のおさらい

前回作成したスクリプトはこちらです。

function searchContactMail() {
 
  const query = '"このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました"';
  const start = 0;
  const max = 10;
 
  const threads = GmailApp.search(query, start, max);
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);
 
  const values = [];
  for(const messages of messagesForThreads){
    const message = messages[0];
    const record = [
      message.getDate(),
      message.getFrom(),
      message.getSubject(),
      message.getPlainBody().slice(0,200)
    ];
    values.push(record);
  }
 
  if(values.length > 0){
    SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
  }
 
}

実行すると、以下のようにスプレッドシートに最新10件の問い合わせメールについて書き出しを行います。

Gmailからのメールをスプレッドシートに出力した結果

しかし、このシートはぼかしているので分かりづらいですが、B列の「from」つまり送信元のアドレスが「Wordpress管理者のアドレス」になってしまっているという問題を見つけました。

また、各メッセージの本文を200文字でスライスしているので、全文がすぐには見られないという問題もあります。

今回は、この2点を解決していきます。

getReplyToでメールの返信先を取得する

まず、送信元が管理者のアドレスになってしまっている件を解決していきます。

問い合わせフォームを作成しているWordPressプラグインContact Form 7のメールの設定を確認すると、以下のようになっていました。

Contact Form 7のメール設定

つまり、送信元アドレスとして、管理者のアドレスが使われるように設定されているのです。

だから、getFromメソッドがすべて管理者のアドレスになってしまうわけです。

代替案として、「追加ヘッダー」に設定されている返信先つまり「Reply-To」を使用することができます。

メールの返信先を取得する際はgetReplyToメソッドで以下のように記述します。

Messageオブジェクト.getReplyTo()

getPermalinkでスレッドのパーマリンクを取得する

続いて、本文を全部読めないという問題について見ていきます。

そのスレッドへのリンクを用意して、そのリンク先で全文を読めるようにしましょう。

スレッドのパーマリンクを取得するにはgetPermalinkメソッドを使います。

Threadオブジェクト.getPermalink()

パーマリンクはスレッド単位での取得になりますので、対象のオブジェクトがThreadオブジェクトになるので注意です。

ですから、メッセージからそれを含むスレッドを取得する必要がありますね。

以下の、getThreadメソッドを使います。

Messageオブジェクト.getThread()

Gmailからメールを取得してスプレッドシートに書き出すスクリプト

以上をまとめると、こちらのスクリプトになります。

function searchContactMail() {
 
  const query = '"このメールは 株式会社プランノーツ http://plannauts.co.jp のお問い合わせフォームから送信されました"';
  const start = 0;
  const max = 10;
 
  const threads = GmailApp.search(query, start, max);
  const messagesForThreads = GmailApp.getMessagesForThreads(threads);
 
  const values = [];
  for(const messages of messagesForThreads){
    const message = messages[0];
    const record = [
      message.getDate(),
      message.getReplyTo(),
      message.getSubject(),
      message.getPlainBody().slice(0,200),
      message.getThread().getPermalink()
    ];
    values.push(record);
  }
 
  if(values.length > 0){
    SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values);
  }
 
}

15行目をgetReplyToメソッドに変更、18行目にパーマリンクの取得を追加しています。

実行結果

実行結果はこちらです。

返信用アドレスへの変更と、パーマリンクの追加を確認してください。

Gmailからのメールをスプレッドシートに出力した結果

また、パーマリンクをクリックすると以下のようにスレッドについて全文を確認できるページに遷移します。

スレッドのパーマリンクをクリックしたページ

まとめ

以上、Gmailのメッセージから返信先とパーマリンクを取得する方法をお伝えしました。

2回にわたって、メッセージの日時、送信元、件名、本文、返信先を、そしてスレッドのパーマリンクを取得するメソッドを紹介しましたが、他にもありますので、用途に応じて調べてみて下さいね。

Class GmailApp | Apps Script | Google Developers

次回は、新たな問い合わせメッセージをスプレッドシートに追加していけるようにしていきます。

【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
Gmailの未読メールを取得する方法、メールを既読にする方法などを活用して、Google Apps Scriptで問い合わせメールを都度スプレッドシートに追加していく方法についてお伝えします。

どうぞお楽しみに!

連載目次:GASでGmailに届いた問い合わせメールを収集する

お仕事の現場では日々様々なメールが届きます。その中で重要なのが「問い合わせメール」ですね。このシリーズでは、Webサイトからの問い合わせメールを自動でスプレッドシートに取り込んだり、チャットワークに送る方法についてお伝えしていきます。

  1. 【GAS】Gmailに送られた過去のメールから特定条件のメールを検索して取得する
  2. 【GAS】Gmailからメールを検索してスプレッドシートに書き出す方法
  3. 【GAS】Gmailのメッセージから返信先とパーマリンクを取得する方法
  4. 【GAS】新たな問い合わせメールをGmailで取得しスプレッドシートに随時追加する
  5. 【GAS】Gmailに来た問い合わせをChatworkに通知してかつタスク追加する
  6. Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法

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