
photo credit: Phil’s 1stPix We Deliver For You- Down on the Farm via photopin (license)
みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
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件の問い合わせメールについて書き出しを行います。
しかし、このシートはぼかしているので分かりづらいですが、B列の「from」つまり送信元のアドレスが「Wordpress管理者のアドレス」になってしまっているという問題を見つけました。
また、各メッセージの本文を200文字でスライスしているので、全文がすぐには見られないという問題もあります。
今回は、この2点を解決していきます。
getReplyToでメールの返信先を取得する
まず、送信元が管理者のアドレスになってしまっている件を解決していきます。
問い合わせフォームを作成しているWordPressプラグインContact Form 7のメールの設定を確認すると、以下のようになっていました。
つまり、送信元アドレスとして、管理者のアドレスが使われるように設定されているのです。
だから、getFromメソッドがすべて管理者のアドレスになってしまうわけです。
代替案として、「追加ヘッダー」に設定されている返信先つまり「Reply-To」を使用することができます。
メールの返信先を取得する際はgetReplyToメソッドで以下のように記述します。
getPermalinkでスレッドのパーマリンクを取得する
続いて、本文を全部読めないという問題について見ていきます。
そのスレッドへのリンクを用意して、そのリンク先で全文を読めるようにしましょう。
スレッドのパーマリンクを取得するにはgetPermalinkメソッドを使います。
パーマリンクはスレッド単位での取得になりますので、対象のオブジェクトがThreadオブジェクトになるので注意です。
ですから、メッセージからそれを含むスレッドを取得する必要がありますね。
以下の、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のメッセージから返信先とパーマリンクを取得する方法をお伝えしました。
2回にわたって、メッセージの日時、送信元、件名、本文、返信先を、そしてスレッドのパーマリンクを取得するメソッドを紹介しましたが、他にもありますので、用途に応じて調べてみて下さいね。
Class GmailApp | Apps Script | Google Developers
次回は、新たな問い合わせメッセージをスプレッドシートに追加していけるようにしていきます。

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





