質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

2回答

1689閲覧

GASを使い問合せメールをスプレッドシートに反映

hide0810

総合スコア0

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2021/08/02 06:29

編集2021/08/02 06:50

前提・実現したいこと

営業をやっています。問い合わせフォームからくる資料請求や打合せ希望のメールをスプレッドシートに転載し、営業メンバーの方が共有できるようにリスト化するという作業が毎日発生しています。
Gmailに送られてくるこれらのお問合せのメールを、GASを用い、スプレッドシートに自動で転載できるようにできれば仕事が減ると思い、3日ほど前からGASの勉強をし始めました。

発生している問題・エラーメッセージ

エラーは発生していないのですが、期待しているようにデータがスプレッドシートに反映されず困っています。

反映したい問合せメールは以下の通りです。
集計テストというスプレッドシートに反映予定です。また、メールには資料ダウンロードとラベルをつけています。


問い合わせ詳細を受け付けました。
お客様へヒアリング対応をお願いします。

━━━━━━━━━━━━━━━━━━━━━━
■ 施設名
〇〇

■お名前
〇〇

■メールアドレス
〇〇

■電話番号
〇〇

■ご希望
〇〇
━━━━━━━━━━━━━━━━━━━━━━

上記のメールをA~F列に以下のようにデータを反映したいです
日付 施設名 お名前 メールアドレス 電話番号 ご希望

しかし、私がいろいろ調べて作ったものだとメール全文しか反映されませんでした。
また、本当に勉強不足で恐縮なのですが、
お力をお借りできないでしょうか。```

GAS

1function getMail01(){ 2 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var objSheet = objSpreadsheet.getSheetByName(“集計テスト“);//シート名をここに入力 4 var sheet = SpreadsheetApp.getActiveSheet(); 5 //GMAILから取得するものを指定 6 var start = 0; 7 var max = 500; 8 var threads = GmailApp.search(‘label:資料ダウンロード is:unread’,start,max); 9 var row = sheet.getLastRow() + 1;//最後の行探してそれ以降に追加 10 for(var n in threads){ 11 var thd = threads[n]; 12 var msgs = thd.getMessages(); 13 for(m in msgs){ 14 var msg = msgs[m]; 15 var body = msg.getBody(); 16 var res = body.split(‘<br>\n<br>‘) 17 // replaceで不要な文字列を削除、splitで改行ごとにuserという変数に代入 18 var user = res[0].split(‘<br />\n’); 19 //この部分はメール文面の前半部分になります。取りたり文字列を必要に応じて書き換えてください 20 sheet.getRange(row, 1).setValue(String(user[0]).replace(“■ 施設名\n([\s\S]*)■お名前“,”“)); 21 sheet.getRange(row, 2).setValue(String(user[1]).replace(“■お名前\n([\s\S]*)■メールアドレス“,”“)); 22 sheet.getRange(row, 3).setValue(String(user[2]).replace(“■メールアドレス\n([\s\S]*)■電話番号“,”“)); 23 sheet.getRange(row, 4).setValue(String(user[3]).replace(“■電話番号\n([\s\S]*)■ご希望“,”“)); 24 sheet.getRange(row, 5).setValue(String(user[4]).replace(“■ご希望“,”“)); 25 row++ 26 } 27 thd.markRead(); 28 Utilities.sleep(1000); 29 } 30} 31 32 33 34 35 36

試したこと

正直何が間違っているのか分からない状態です。

補足情報(FW/ツールのバージョンなど)

初歩的なところがわからず大変お手数をおかけしますが、ご指導いただけると嬉しいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/08/02 06:37

提示のコードはJavaScriptかと。JavaとJavaScriptは全く違う言語なので Javaタグを外してJavaScriptタグを付けてください。
hide0810

2021/08/02 06:40

ご丁寧にありがとうございます。 修正いたしました。
K_3578

2021/08/02 06:42

ついでに言うならGASも「Google Apps Script」としてタグはあります。
guest

回答2

0

多分以下のようなコードで出来るかもしれません。
出来なかったらまた聞いてください。

GAS

1function getMail01() { 2 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 //var objSheet = objSpreadsheet.getSheetByName("集計テスト"); //シート名をここに入力 4 var sheet = objSpreadsheet.getActiveSheet(); 5 //GMAILから取得するものを指定 6 var start = 0; 7 var max = 500; 8 var threads = GmailApp.search(`label:資料ダウンロード is:unread`, start, max); 9 for (var n in threads) { 10 var thd = threads[n]; 11 var msgs = thd.getMessages(); 12 for (m in msgs) { 13 var msg = msgs[m]; 14 var plain_body = msg.getPlainBody(); 15 console.log(plain_body); 16 var data = { 17 施設名: plain_body 18 .replace(/^[\s\S]*?■(\s+)?施設名/, ``) 19 .replace(/■[\s\S]*/, ``) 20 .trim(), 21 お名前: plain_body 22 .replace(/^[\s\S]*?■(\s+)?お名前/, ``) 23 .replace(/■[\s\S]*/, ``) 24 .trim(), 25 メールアドレス: plain_body 26 .replace(/^[\s\S]*?■(\s+)?メールアドレス/, ``) 27 .replace(/■[\s\S]*/, ``) 28 .trim(), 29 電話番号: plain_body 30 .replace(/^[\s\S]*?■(\s+)?電話番号/, ``) 31 .replace(/■[\s\S]*/, ``) 32 .trim(), 33 ご希望: plain_body 34 .replace(/^[\s\S]*?■(\s+)?ご希望/, ``) 35 .replace(/\n(\━){1,}/, ``) 36 .trim(), 37 }; 38 var date = Utilities.formatDate(msg.getDate(), "Asia/Tokyo", "yyyy/MM/dd HH:mm"); 39 console.log(data); 40 console.log(msg.getDate()); 41 console.log(date); 42 sheet.appendRow([date, data.施設名, data.お名前, data.メールアドレス, data.電話番号, data.ご希望]); 43 } 44 thd.markRead(); 45 Utilities.sleep(1000); 46 } 47} 48

投稿2021/08/02 21:43

fake_shibe

総合スコア806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hide0810

2021/08/18 01:25

回答ありがとうございます。 メールがスレッド単位で抽出されてしまい、メールが入ることに重複が起きるのですがどうしたらいいでしょうか。 また、ご希望の欄で 〇〇 ━━━━━━━━━━━━━━━━━━━━━━ と抽出されてしまいます。━━がつかないようにしたいのですがどうしたらいいでしょうか。
fake_shibe

2021/08/18 10:20

まず、━━━━━━━━━━━━━━━━━━━━━━をつかないようにするのですが、以下に修正すれば━━━━━━━━━が消えるかとおもいます。 ご希望: plain_body .replace(/^[\s\S]*?■(\s+)?ご希望/, ``) .replace(/(\━){2,}/, ``) .trim(), 次に、「メールがスレッド単位で抽出されてしまい、メールが入ることに重複が起きる」ということですが、 var threads = GmailApp.search(`label:資料ダウンロード is:unread`, start, max); 上記でラベルが「資料ダウンロード」で「未読」のものを取得しています。 thd.markRead(); スプレッドシートに情報を記載したあと上記のところで、スレッドを既読にしています。 ですので、スレッドを既読しているので既読分は重複しないと思いますがどうでしょうか?(私の解釈が違うかもしれませんが)
guest

0

replaceのところでうまく置換できていないのではないでしょうか。
改行コードが異なる場合対応できない可能性はありますが、
たとえば下記のようなコードの場合いかがでしょうか。

js

1function getMail01(){ 2 var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 3 var objSheet = objSpreadsheet.getSheetByName("集計シート");//シート名をここに入力 4 var sheet = SpreadsheetApp.getActiveSheet(objSheet); 5 6 //GMAILから取得するものを指定 7 var start = 0; 8 var max = 500; 9 var threads = GmailApp.search('label:問い合わせ is:unread',start,max); 10 var row = sheet.getLastRow() + 1;//最後の行探してそれ以降に追加 11 for(var n in threads){ 12 var thd = threads[n]; 13 var msgs = thd.getMessages(); 14 for(var m in msgs){ 15 var msg = msgs[m]; 16 var body = msg.getBody(); 17 sheet.getRange(row, 1).setValue(/■ 施設名\r\n(.*?)\r\n/.test(body) ? RegExp.$1 : ''); 18 sheet.getRange(row, 2).setValue(/■お名前\r\n(.*?)\r\n/.test(body) ? RegExp.$1 : ''); 19 sheet.getRange(row, 3).setValue(/■メールアドレス\r\n(.*?)\r\n/.test(body) ? RegExp.$1 : ''); 20 sheet.getRange(row, 4).setValue(/■電話番号\r\n(.*?)\r\n/.test(body) ? RegExp.$1 : ''); 21 sheet.getRange(row, 5).setValue(/■ご希望\r\n(.*?)\r\n/.test(body) ? RegExp.$1 : ''); 22 row++ 23 } 24 thd.markRead(); 25 Utilities.sleep(1000); 26 } 27}

投稿2021/08/02 10:00

編集2021/08/18 01:37
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hide0810

2021/08/18 01:27

回答ありがとうございます。 エラー Exception: Invalid argument: sheet getMail01 @ コード.gs:4 となってしまいます。
退会済みユーザー

退会済みユーザー

2021/08/18 01:38

4行目を修正しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問