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

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

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

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

Google Apps Script

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

メール

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

Q&A

1回答

7035閲覧

GASで抽出したGmailの本文の特定の文字以降を抽出させたい

WINGBLUE

総合スコア0

Gmail

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

Google Apps Script

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

メール

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

0グッド

1クリップ

投稿2021/05/21 11:30

編集2021/05/21 11:46

前提・実現したいこと

現在該当のソースコードのとおり、GASを利用し、const queryにて特定の件名のメールに対して、
メール本文・送信者、日時などを抽出しているが、

メール本文の中の特定の文字・数字を抽出したい。

具体的な本文は以下の通り
ーーーーーー
ご予約内容
━━━━━
[予約No]
114097888
[ご利用希望日時]
2021年05月15日 10:00〜18:00
ーーーーーー

上記メール本文には必ず「予約No」、「ご利用希望日時」があり、その後改行したあとに、それぞれのIDや日時が記載されている。

そのため、現在は
A列:日時
B列:宛先
C列:件名
D列:本文全文
E列:メールリンク

となっているが、
A列:日時
B列:宛先
C列:件名
D列:本文全文
E列:本文内の予約no抽出(上記「114097888」の部分)
F列:本文内の御利用希望日時抽出(上記「2021年05月15日 10:00〜18:00」の部分)
E列:メールリンク

という形にしたい。

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

なし

該当のソースコード

function searchContactMail() { const query = '"件名で抽出"'; 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.getTo(), message.getSubject(), message.getPlainBody().slice(0,2000), message.getThread().getPermalink() ]; values.push(record); } if(values.length > 0){ SpreadsheetApp.getActiveSheet().getRange(2, 1, values.length, values[0].length).setValues(values); } }

試したこと

以下のようなコードで一度該当箇所を抽出し、その後、replaceで番号や日時のみ返す(不必要部分の削除)で抜き出しができるのではないかと考えているが、どこに入れてよいかわからず、
エラーが出続けてしまう。

plainBody.match(/[予約No]./)[0].replace('[予約No]:', ''), plainBody.match(/[ご利用希望日時]./)[0].replace('[ご利用希望日時]:', ''),])

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

不明

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

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

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

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

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

WINGBLUE

2021/05/21 11:41

失礼しました。躓いた部分まできちんと記載します!
guest

回答1

0

WINGBLUEさんの、↓これが正しいものとして進めますね!
すみませんノーチェックなので、正規表現チェッカー等で確認お願いします。

gas

1plainBody.match(/[予約No].*/)[0].replace('[予約No]:', ''), plainBody.match(/[ご利用希望日時].*/)[0].replace('[ご利用希望日時]:', ''),])

正規表現で抜き出しものを入れたいだけであれば、こんな感じでいいと思うんですが?

gas

1const record = [ 2 message.getDate(), 3 message.getTo(), 4 message.getSubject(), 5 message.getPlainBody().slice(0,2000), 6 message.getPlainBody().match(/[予約No].*/)[0].replace('[予約No]:', ''), 7 message.getPlainBody.match(/[ご利用希望日時].*/)[0].replace('[ご利用希望日時]:', ''), 8 message.getThread().getPermalink() 9]

投稿2021/05/21 14:47

Tatsunosuke

総合スコア599

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問