Gmailのレコード取り込みについて

当方Kintoneはおろか、書く言語、GASも初心者なのですが、下記要件を満たしたく奮闘しており、どうしても何が原因かわからずに困っております。

お気づきの点がありましたらご助言頂けますと幸いです。

背景・実現したいこと

 Gmailに受信した特定タイトルのメールの本文内特定の文字列以降をレコードをそれぞれのフィールドに登録し、添付ファイルがある場合はレコードに添付する。(下記コードでここまでは実現できた)

該当メールが複数受信していても、対応できるようにしたい

エラー情報 (開発者ツールのコンソール)

 GAS

該当メールが2通受信している場合、1件は取り込まれるが、2件目は取り込まれずに既読になってしまう

利用したソースコード

/*
* 添付ファイル付のGmailメッセージをkintoneに自動的にアップロード
* Copyright (c) 2018 Cybozu
*
* Licensed under the MIT License
*/

‘use strict’;
var domain = “○○.cybozu.com”;
var appId = △;
var apiToken = “888888888888888888888888888888888”;
var appName = “テストアプリ”;

function replaceCharacters(str) {
return str
.replace(/“/g, “'”)
.replace(//g, “")
.replace(/\r/g, “\r”)
.replace(/\t/g, “\t”);
}
function uploadAttachment(attachment) {
var blob = attachment.copyBlob();
// Make a POST request with form data.
var formData = {
‘file’: blob
};
var formHeader = {
‘X-Requested-With’: ‘XMLHttpRequest’,
‘X-Cybozu-API-Token’: apiToken
};
// Because payload is a JavaScript object, it will be interpreted as
// as form data. (No need to specify contentType; it will automatically
// default to either ‘application/x-www-form-urlencoded’
// or ‘multipart/form-data’)
var options = {
‘method’: ‘post’,
‘headers’: formHeader,
‘payload’: formData
};
return UrlFetchApp.fetch(‘https://’ + domain + ‘/k/v1/file.json’, options);
}
function getGmailMessage() {
// Get all unread threads with the subject in inbox
var threads = GmailApp.search(‘is:unread subject:【受付確認】申請を受け付けました’);
console.log(myMessage.getId())
var records = ‘[{’;
for (var i = 0; i < threads.length; i++) {
var messages = threads[i].getMessages();// Get messages
for (var j = 0; j < messages.length; j++) {
var message = messages[j];
if(message.isUnread()) { // スレッド内の未読メールのみ対象
var attachments = message.getAttachments();
var fileKeys = ‘’;
for (var k = 0; k < attachments.length; k++) {
Logger.log(‘Message “%s” contains the attachment “%s” (%s bytes)’,
message.getSubject(), attachments[k].getName(), attachments[k].getSize());
var fileKey = uploadAttachment(attachments[k]);
if (fileKey !== null) {
fileKeys += fileKey + ‘,’;
}
}
records += Utilities.formatString('“item_1” :{“value”:”%s”}‘,
message.getPlainBody().match(/お名前:[\s\S]*フリガナ:/)[0].replace(‘お名前:’, ‘’).replace(‘フリガナ:’, ‘’).replace(/"/g, “'”).replace(//g, "").replace(/\r/g, “\r”).replace(/\t/g, “\t”));
records += Utilities.formatString(’,“item_2” :{“value”:“%s”}‘,
message.getPlainBody().match(/フリガナ:[\s\S]*電話番号:/)[0].replace(‘フリガナ:’, ‘’).replace(‘電話番号:’, ‘’).replace(/"/g, “'”).replace(//g, "").replace(/\r/g, “\r”).replace(/\t/g, “\t”));
records += Utilities.formatString(’,“item_3” :{“value”:“%s”}‘,
message.getPlainBody().match(/電話番号:[\s\S]*メールアドレス(自動返信メールの宛先):/)[0].replace(‘電話番号:’, ‘’).replace(‘メールアドレス(自動返信メールの宛先):’, ‘’).replace(/"/g, “'”).replace(//g, "").replace(/\r/g, “\r”).replace(/\t/g, “\t”));
records += Utilities.formatString(’,“item_4” :{“value”:“%s”}‘,
message.getPlainBody().match(/メールアドレス(自動返信メールの宛先):.*/)[0].replace(‘メールアドレス(自動返信メールの宛先):’, ‘’).replace(/"/g, “'”).replace(//g, "").replace(/\r/g, “\r”).replace(/\t/g, “\t”));
if (fileKeys.length > 0) {
if (fileKeys.match(’,$‘)) {
fileKeys = fileKeys.substring(0, fileKeys.length - 1);
}
records += Utilities.formatString(’,“Attachment”:{“value”:[%s]}‘, fileKeys);//File Keyの設定
}
records += ‘,’;
message.markRead(); // Mark as read
}
}
}
if (records.match(’,$')) {
records = records.substring(0, records.length - 1);
}
records += ‘}]’;
Logger.log(‘Response JSON is “%s”’, records);
return records;
}
function sendToKintone() {
Logger.log(‘Function called’);

var apps = {
YOUR_APPLICATION1: {
appid: appId,
name: appName,
token: apiToken
}
};
var manager = new KintoneManager.KintoneManager(domain, apps);// ライブラリーの初期化
var str = getGmailMessage();
var records = JSON.parse(str);// JSON形式に変換
if (str.length > 4){
var response = manager.create(“YOUR_APPLICATION1”, records);//kintone レコードの生成
// ステータスコード
// 成功すれば200になる
var code = response.getResponseCode();
Logger.log(‘response=> “%s”’, response);
} else {
Logger.log(‘No record found’);
}
}

こんにちは。

こちらの記事を参考にしたコードですよね?
https://developer.cybozu.io/hc/ja/articles/360000744546

コードを比較してみると、getGmailMessage関数内で行われている
「records」に格納するデータの整形方法が、微妙に変わってしまっているようです。
(例)
var records = ‘[’;

var records = ‘[{’;

この辺りを修正すると、うまく動作するかもしれません。

ろどすた様

おっしゃるとおりの記事を見て、自分なりに複数行でも取り込めるようにしてみたりと触っておりました。

ご指摘の通り、元のコードと自身のコードをしっかりと見直し、修正を行いましたところ、無事複数のメールを取り込むことに成功しました。この2日ほどこれで頭を抱えていたのが何だったのか。。。。非常にスッキリいたしましました。

本当にありがとうございます。

最近、GASを触りはじめた初心者です。F.T様と同じような課題があり、こちらのスクリプトを参考に作成したのですが、以下のエラーが出てしまい大変苦心しております。

エラー ReferenceError: myMessage is not defined

ご助言のほど、何卒よろしくお願い申し上げます。