APPSCRIPT从Gmail中检索带有电子邮件地址的上次交互日期



我的脚本目前正在"工作";但是我总是在最后一行出错——所以它的失败率是100%。

我试图有应用程序脚本看在我的gmail为最后的互动日期的电子邮件列表,将不断变化,更多的行将被添加。它应该查找发送或接收的电子邮件,并打印最后一次交换的日期。

下面是我当前的脚本:

/**
* @license MIT
* @author xfanatical. 
*/
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var emailsRange = ss.getRangeByName('Emails')
var getLastMessageDate = ss.getRangeByName('LastReceivedDate')

var emails = emailsRange.getValues()
for (var i = 1; i <= emails.length; i++) {
var email = emails[i][0].replace(/^s+|s+$/g, '')
if (email === '') {
continue
}
var thread = GmailApp.search('to:' + email, 0, 1)
Logger.log('email = ' + email)
var targetCell = getLastMessageDate.getCell(i + 1, 1)
if (thread.length === 0) {
targetCell.setValue('Not Found')
} else {
var messages = thread[0].getMessages()
for (var j = messages.length - 1; j >= 0; j -= 1) {
var message = messages[j]
Logger.log('checking message: ' + message.getTo())
if (message.getTo().indexOf(email) !== -1) {
var date = message.getDate()
var dateStr = date.getDate() + "/"
+ (date.getMonth()+1)  + "/" 
+ date.getFullYear()  
targetCell.setValue(dateStr)
break
}
}
}
}
}

我得到以下错误:

Error TypeError: Cannot read properties of undefined (reading '0')myFunction(代码:12:26)

我相信你的目标是这样的。

  • 您要删除Error TypeError: Cannot read properties of undefined (reading '0') at myFunction(Code:12:26)的错误。

当我看到你的脚本时,我以为for (var i = 1; i <= emails.length; i++) {是你现在问题的原因。在此条件下运行循环时,当iemails.length时,由于emails[i]未定义,在emails[i][0]处发生错误。那么,在这种情况下,作为一个简单的修改,下面的修改如何?

:

for (var i = 1; i <= emails.length; i++) {

:

for (var i = 1; i < emails.length; i++) {

注意:

  • 我认为作为另一种方法,forEach,map也可以使用。但是,从你的展示脚本来看,我认为以上的修改可能有助于理解你目前问题的原因。所以,我提出了这个建议。

最新更新