Доступ запрещен при использовании GmailApp.sendEmail - Отсутствует токен доступа для авторизации - PullRequest
0 голосов
/ 10 ноября 2019

Несмотря на то, что я добавил в свой манифест следующие oauthscopes, я все еще получаю следующую ошибку при запуске метода GmailApp.sendEmail:

Access denied:: Missing access token for authorization. Request: MailboxService.SendMessage

Мой манифест выглядит так:

"oauthScopes": [
"https://www.googleapis.com/auth/drive.readonly",
"https://www.googleapis.com/auth/spreadsheets.currentonly",
"https://www.googleapis.com/auth/userinfo.email",
"https://www.googleapis.com/auth/gmail.send",
"https://www.googleapis.com/auth/gmail.compose",
"https://www.googleapis.com/auth/gmail.addons.current.action.compose",
"https://www.googleapis.com/auth/script.send_mail",
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/gmail.modify"  ],

Вот код:

function main_Capitations() {
  var cell_col_number = "";
  var cell_row_number = "";
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('2019-2020');
  //ss.setActiveSelection('A3');
  ss.getRange('A3').activate();

  // Get active cell and get value of it
  var cell = ss.getCurrentCell();
  var cellValue = cell.getValue();

  // Start the loop
  while (cellValue != ""){
    cellValue = cell.getValue();
    if (cellValue != "") {
      //Browser.msgBox("Row: " + cell.getRow() + " Column: " + cell.getColumn() + "Valeur : " + cellValue);

    var infos_user = {};
    infos_user.prenom = sheet.getRange(cell.getRow(),cell.getColumn()+2).getValue();
    infos_user.mail = sheet.getRange(cell.getRow(),cell.getColumn()+3).getValue();
    infos_user.solde_a_payer = sheet.getRange(cell.getRow(),cell.getColumn()+8).getValue();

    Logger.log('infos_user.prenom: ' + infos_user.prenom);
      Logger.log('infos_user.mail: ' + infos_user.mail);
      Logger.log('infos_user.solde_a_payer: ' + infos_user.solde_a_payer);

    if (sheet.getRange(cell.getRow(),cell.getColumn()+9).isChecked()  == false) {
      sendmail_paiement(infos_user);  
    }
    };
    cell = cell.offset(1, 0);
    Logger.log('infos_user.mail: ' + cell.getValue());
  };  

  var infos_globales = {};
  infos_globales.solde_global = sheet.getRange(cell.getRow()-1,cell.getColumn()+8).getValue();
  infos_globales.nb_frere_hospitalier = sheet.getRange(cell.getRow()-1,cell.getColumn()+9).getValue();
  infos_globales.nb_frere_retard =sheet.getRange(cell.getRow()-1,cell.getColumn()+10).getValue();

  Logger.log('infos_globales.solde_global ' + infos_globales.solde_global);
  Logger.log('infos_globales.nb_frere_hospitalier ' + infos_globales.nb_frere_hospitalier);
  Logger.log('infos_globales.nb_frere_retard  ' + infos_globales.nb_frere_retard );

  sendmail_synopsis(infos_globales);  
}

function sendmail_paiement(infos_user) {

   var templ = HtmlService
  //.createTemplateFromFile('tpl_mail_traditionnel');
   .createTemplateFromFile('tpl_test');
  //.createTemplateFromFile('tpl_mail_exceptionnel');


  templ.infos_user = infos_user;

  var message = templ.evaluate().getContent();

  //Browser.msgBox(infos_user.mail);

  if (infos_user.solde_a_payer>0) {
    GmailApp.sendEmail(
      infos_user.mail,
      "Rappel de capitations", 
      '', 
      {htmlBody: message,}
    );
  }
}

function sendmail_synopsis(infos_globales) {
  var templ = HtmlService
   .createTemplateFromFile('mail_synopsis_template');

  templ.infos_globales = infos_globales;

  var message = templ.evaluate().getContent();

  GmailApp.sendEmail(
    'zzzxxxyyy@gmail.com',
    "Résumé de la trésorerie du Gaïac", 
    '', 
    {htmlBody: message,}
  );

}

Похоже, что некоторые другие люди имели ту же ошибку, что и я, но они могли бы ее решить (не я) с помощью следующей строки в манифесте:

"https://www.googleapis.com/auth/script.send_mail",

Что я пропустил ??

Спасибо за помощь!

1 Ответ

1 голос
/ 10 ноября 2019

Вы используете две разные области отправки электронной почты:

  • "... // www.googleapis.com/auth/gmail.send"
  • " ... //www.googleapis.com/auth/script.send_mail"

Область действия:

"... // www.googleapis.com/auth/script.send_mail"

только для класса MailApp. Вы используете класс GmailApp.

Не следует использовать обе области отправки электронной почты. Класс MailApp более ограничен в доступе к данным пользователя. Все, что он может сделать, это отправить электронное письмо.

Если ошибка исчезнет, ​​перейдя с GmailApp на MailApp, то я предполагаю, что существует конфликт между этими двумя областями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...