Автоответчик в Gmail, почему при получении нового письма появляется ошибка?

#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 в такой ситуации.