#google-apps-script #google-sheets #gmail
#google-apps-script #google-sheets #gmail
Вопрос:
Добрый день, я нашел этот скрипт в открытом доступе и оптимизировал его для своих задач, но он почему-то не отвечает на входящие письма. Есть триггер на 1 минуту, но когда приходит входящее письмо, я получаю сообщение об ошибке TypeError: Cannot read property 'indexOf' of null in Line 29
, я не могу понять, в чем проблема, что я делаю не так? Буду рад любой помощи
function autoReply() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var answer = ss.getRange("A2").getValue();
var fileattach = ss.getRange("B2").getValue();
var mimetype = ss.getRange("C2").getValue();
var interval = 1;
var date = new Date();
var day = date.getDay();
var daysOff = [1,2,3,4,5,6,0];
if (daysOff.indexOf(day) > -1){
var timeFrom = Math.floor(date.valueOf()/1000) - 60 * interval;
var threads = GmailApp.search('is:inbox after:' timeFrom);
for (var i = 0; i < threads.length; i ) {
if (threads[i].isUnread()){
var sender=threads[i].getMessages()[0].getFrom();
if(PropertiesService.getScriptProperties().getKeys().length==0){
PropertiesService.getScriptProperties().setProperty('from', '');
}
var scriptProperties = PropertiesService.getScriptProperties().getProperty('fromArray');
var attach = DriveApp.getFilesByName(fileattach).next();
if(scriptProperties.indexOf(sender)==-1){
threads[i].reply(answer,{
attachments:[attach.getAs(mimetype)]
});
threads[i].markRead();
scriptProperties=scriptProperties sender;
PropertiesService.getScriptProperties().setProperty('from', scriptProperties);
}
}
}
}
Комментарии:
1. Можете ли вы подтвердить, что
scriptProperties
переменная не равна null? Если вы делаетеconsole.log(scriptProperties)
, что вы получаете?2. [20-11-12 17:00:04:516 YEKT] Ошибка типа: не удается прочитать свойство ‘indexOf’ с нулевым значением при автоответчике (Код: 21:29)
3. И каково значение
scriptProperties
переменной?4. Во-первых, исправьте свое именование — вызывать один объект — плохая идея
scriptProperties
. Поверьте мне, однажды это вас укусит. Кроме того, избегайте вызововPropertiesService.getScriptProperties()
в цикле, получите к нему доступ один раз и сохраните в переменной. Причина вашей ошибки, вероятно, заключается.getProperty('fromArray')
в следующем: почему вы ожидаете, что оно не будет нулевым при сохранении.setProperty('from', '')
?5. @Oleg Valter Спасибо, ошибка действительно была в
.getProperty('fromArray')
изменении на.getProperty('from')
Ответ №1:
TypeError: Cannot read property 'indexOf' of null in Line 29
Сообщение об ошибке, которое вы получаете, связано с тем, что вы пытаетесь вызвать indexOf
метод null
объекта.
Более конкретно, ваша ошибка исходит из этой строки здесь
var scriptProperties = PropertiesService.getScriptProperties().getProperty('fromArray');
И когда вы звоните scriptProperties.indexOf
, поскольку scriptProperties
находится null
в такой ситуации.