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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Gmail

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

1回答

5350閲覧

【GAS】Gmailの本文の一部を抽出してGoogleチャットへ転送したい

dshiraiwa

総合スコア9

Gmail

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2021/07/08 09:44

編集2021/07/08 11:01

タイトルの件、以下のコードで組んでみたのですが上手くいきませんでした。
ご存じの方、ご指導いただけないでしょうか…?
(gmailの文章の各項目に続く内容に加えて、詳細について定型URLをくっつけた形でGoogleチャットに転送する)

GAS上で保存はできるのですが、トリガーを設定すると「失敗しました」と表示され、詳細については

TypeError: messages[i].getPlainBody is not a function
at gsuiteUpdateBlog(コード:14:33)

と表示されてしまいます。

function gsuiteUpdateBlog() { var words = ""; var chatMessage; var strTerms = '(label:チャット転送メール subject:{' + words + '})'; var threads = GmailApp.search(strTerms); var messages = GmailApp.getMessagesForThreads(threads); var url = 'Googleチャットのwebhookアドレス'; for(var i=0; i<messages.length; i++){ chatMessage = messages[i].getPlainBody() + detailedurl; var plainBody = messages[i][0].getPlainBody(); plainBody.match(/購入日時: (.*)/)[0], plainBody.match(/利用店名: (.*)/)[0], plainBody.match(/内容: (.*)/)[0]; var detailedurl = "定型のクリック用URL"; var botMessage = { 'text' : chatMessage} var options = { 'method': 'POST', 'headers' : { 'Content-Type': 'application/json; charset=UTF-8' }, 'payload':JSON.stringify(botMessage) } var result = UrlFetchApp.fetch(url, options); } threads[i].moveToTrash(); }

※コード内容を一部修正しました

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

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

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

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

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

itagagaki

2021/07/08 10:26

どこがうまくいかないのか教えていただけますか? そうでないと、すべてをチェックしなければならないので、骨が折れます。
dshiraiwa

2021/07/08 11:02

> どこがうまくいかないのか教えていただけますか? > そうでないと、すべてをチェックしなければならないので、骨が折れます。 申し訳ございません。また今回もコメントありがとうございます。 冒頭の部分、エラーの詳細について追記させていただきました。 お手数をおかけいたします…。
guest

回答1

0

getMessagesForThreads()の戻り値は二次元配列なので二重ループで処理する必要があります。
下記ページを参照してください。

Class GmailApp | Apps Script | Google Developers

投稿2021/07/08 11:35

itagagaki

総合スコア8402

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

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

dshiraiwa

2021/07/08 12:38

スイマセン! いただいた参照リンクを踏まえまして以下のように一部を修正したのですが… for (var i = 0 ; i < messages.length; i++) { for (var j = 0; j < messages[i].length; j++) { chatMessage = messages[i][j].getPlainBody(); + detailedurl; 今度は、トリガーで以下のエラーが発生してしまいました。 ReferenceError: plainBody is not defined at gsuiteUpdateBlog(コード:19:7) 今度は「plainBodyが参照できない」と出たのですが、考えられるエラーについて、ご指導いただけないでしょうか…?
itagagaki

2021/07/08 12:41

var plainBody の定義を消してしまったのでは?
dshiraiwa

2021/07/08 13:08

たびたびのやり取りとなり、本当に申し訳ありません…。 > var plainBody の定義を消してしまったのでは? ご指摘の通り、修正をいたしました。 無事、完了となったのですが、実際にデモをやってみたところ… 今度は以下のメールが出てしまいました…。 ↓ Exception: https://chat.googleapis.com のリクエストに失敗しました(エラー: 400)。サーバー応答の一部: { "error": { "code": 400, "message": "Message cannot be empty.", "status": "INVALID_ARGUMENT" } } (応答の全文を見るには muteHttpExceptions オプションを使用してください) at gsuiteUpdateBlog(コード:63:32) 度重なるアドバイスをいただいておきながら本当に申し訳ないです…。
itagagaki

2021/07/08 13:23

Message cannot be empty. って言っているのだから送信データが空だったのではないでしょうか。 エラーメッセージは何がいけなかったのかを伝えていますのでまずそれを理解することです。 そして、それを手掛かりにしてだいたいの当たりを付けてconsole.log()等を活用してデバッグすることです。
dshiraiwa

2021/07/09 01:54

ありがとうございます! > エラーメッセージは何がいけなかったのかを伝えていますのでまずそれを理解することです。 はい、仰る通りだと思いました。(英語が苦手でその辺を避けておりましたので、英文の理解を心がけます) アドバイスの後、何度か挑戦したのですが…今度は、チャットに配信されるものの、内容が全文=(plainBody.match(/○○: (.*)/) が効いていない)状態となってしまいました…。 引き続き、試行錯誤をしてみます…。スイマセン!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問