Я пишу скрипт приложений Google, чтобы пометить электронные письма, идентифицированные как внутренние, через gsuite gmail logs. Журналы запрашиваются через bigquery, как вы можете видеть из кода ниже. Я не уверен, что я делаю неправильно. Я проверил разрешение, и все в порядке. Я действительно не хочу помещать результат запроса в лист и затем запрашивать значение «is_internal» из листов. Я открыт для любых предложений, которые сделают эту работу и улучшат код. Заранее спасибо за помощь. Я
function myFunction() {
// Get the first message in the first thread of your inbox
var message = GmailApp.getInboxThreads(0, 1)[0].getMessages()[0];
// Get its ID
var messageId = message.getId();
// Now fetch the same message using that ID.
var messageById = GmailApp.getMessageById(messageId);
// Should always log true as they should be the same message
var messageIdRFC2822 = message.getHeader("Message-ID");
// Get RFC 2822 message ID
var subject = message.getSubject();
Logger.log(subject);
Logger.log(messageIdRFC2822);
// input RFC2822 message id and subject to query BigQuery
var projectId = 'gmail-gsuite-logs';
var request = {
query: 'SELECT message_info.connection_info.is_internal FROM `gmail-gsuite-logs.gmail_logs_dataset.daily_20200304` WHERE message_info.rfc2822_message_id="<xxxxxxxxxxxxx@mail.gmail.com>" LIMIT 1;',
useLegacySql: false
}
var queryResults = BigQuery.Jobs.query(request, "gmail-gsuite-logs");
var jobId = queryResults.jobReference.jobId;
var jobTable = BigQuery.Jobs.getQueryResults(projectId, jobId);
var jobList = BigQuery.Jobs.list(projectId);
// Logger.log(jobId);
// Logger.log(queryResults);
// Logger.log(jobTable);
// Logger.log(jobList);
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {pageToken: queryResults.pageToken});
rows = rows.concat(queryResults.rows);
}
var data = new Array(rows.length);
for (var i = 0; i < rows.length; i++) {
var cols = rows[i].f;
data[i] = new Array(cols.length);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
var is_internal = Logger.log(data);
return data.toString();
if (is_internal == "[[true]]") {
var label = GmailApp.getUserLabelByName("Safe");
message.addLabel(label);
Logger.log('Label added');
}
else {
Logger.log('Label not added')
}
}