🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Gmail

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

Google Apps Script

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

Q&A

1回答

1500閲覧

GAS Gmail本文取得エラー解除

FFFKKKUUU

総合スコア0

Gmail

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

Google Apps Script

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

0グッド

0クリップ

投稿2021/03/20 08:15

前提・実現したいこと

Gmailの本文を抜き出してスプレッドシートに転記したい。本文内を繰り返し複数取得する。
昨日までエラーにならなかったが、なぜかエラーが出るようになりました。

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

エラーメッセージ TypeError: Cannot read property 'length' of null(行 12、ファイル「コード」)

該当のソースコード

ソースコード function mailup6() { // 検索条件に該当するスレッド一覧を取得 var result = []; var threads = GmailApp.search('subject:({"変更書類new" "新規書類new"}) -label:処理済み'); // 検索したスレッドを繰り返し取得する。 for (var i = 0; i < threads.length; i++) { var messageBody = threads[i].getMessages()[0].getPlainBody(); // 本文から必要部分だけをくりかえし取得する。 var SInums = messageBody.match(/SI[\s\S]*?リンク:(?:\r\n|\r|\n)(https?://[\w!?/+_~=;.,*&@#$%()'[]-]+)/g); for (var j = 0; j < SInums.length; j++) { // 日を取り出す var cutday = SInums[j].match(/日:(.*)/)[0].replace('日:', ''); // を取り出す var CYORCFS = SInums[j].match(/CY・CFS・MVAN:(.*)/)[0].replace('CY・CFS・MVAN:', ''); // 新規・変更を取り出す var status = SInums[j].match(/新規・変更:.*/)[0].replace('新規・変更:', ''); // 担当者を取り出す var name = SInums[j].match(/担当者:.*/)[0].replace('担当者:', ''); // SI番号を取り出す var SIno = SInums[j].match(/SI:.*/)[0].replace('SI:', ''); // 顧客を取り出す var shipper = SInums[j].match(/顧客:.*/)[0].replace('顧客:', ''); // 名を取り出す var vessel = SInums[j].match(/名:.*/)[0].replace('名:', ''); // 変更内容を取り出す var revice = SInums[j].match(/変更内容・特記事項:.*/)[0].replace('変更内容・特記事項:', ''); // リンクを取り出す var link = SInums[j].match(/リンク:(?:\r\n|\r|\n)(https?://[\w!?/+_~=;.,*&@#$%()'[]-]+)/m)[0].replace('リンク:', ''); result.push([cutday, CYORCFS, status, name, SIno, shipper, vessel, , , , revice, link]); } } var output = result.reverse(); // 書き込むシートを取得 var sheet = SpreadsheetApp.getActive().getSheetByName('進捗'); // 最終行を取得 var lastRow = sheet.getLastRow() + 1; try{ // セルを取得して値を転記 sheet.getRange(lastRow, 2, output.length, 12).setValues(output); //チェックボックスを配置する sheet.getRange(lastRow, 10, output.length).insertCheckboxes(); sheet.getRange(lastRow, 11, output.length).insertCheckboxes(); }catch(e){ Logger.log("エラーです"); } //スレッドに処理済みラベルを付ける var label = GmailApp.getUserLabelByName('処理済み'); threads.forEach(thread => thread.addLabel(label)); //threads.addLabel(label); } ### 試したこと Gmail本文の入力に問題ないか確認をしました。 以前エラーがなかった時と同じなので何が問題なのかわからない状態です。 Gmaiの本文 題:新規書類new SI:20F-0900 日:4/30 CY・CFS・MVAN:xxx 新規・変更:新規 担当者:xxxx 輸出者:de.CORPORATION 名:xxxx 変更内容・特記事項:xxxxx リンク:https://drive.google.com/drive/folders/xxxxxx=sharing ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。 ### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ

エラーメッセージ

### 該当のソースコード ```ここに言語名を入力 ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

時間が経過した質問ですが、GASの未回答を減らしたいため回答いたします。

gas

1 エラーメッセージ TypeError: Cannot read property 'length' of null(行 12、ファイル「コード」) 2

length が取れていないためにエラーとなっています。
おそらくここでのエラーです。

gas

1var SInums = messageBody.match(/SI[\s\S]*?リンク:(?:\r\n|\r|\n)(https?://[\w!?/+_~=;.,*&@#$%()'[]-]+)/g); 2 3

メールが取得できていないか、本部matchが一致しないため、エラーと思われます。
matchの条件で分岐するよう変更しました。

gas

1 // 検索したスレッドを繰り返し取得する。 2 for (var i = 0; i < threads.length; i++) { 3 var messageBody = threads[i].getMessages()[0].getPlainBody(); 4 // 本文から必要部分だけをくりかえし取得する。 5 var SInums = messageBody.match(/SI[\s\S]*?リンク:(?:\r\n|\r|\n)(https?://[\w!?/+_~=;.,*&@#$%()'[]-]+)/g); 6 7 if(SInums){ 8 //省略 9 10 11 }else{ 12 console.log("本文が一致しませんでした。" + messageBody) 13 14 } 15

投稿2021/05/26 10:05

Tatsunosuke

総合スコア599

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問