Отправка вложения в формате Word не работает в Google Script - PullRequest
0 голосов
/ 06 января 2020

Мне удалось успешно отправить вложение в формате PDF, но когда я пытаюсь отправить вложение в формате Word, я получаю эту ошибку:

"Запрос не выполнен для https://docs.google.com вернул код 404. Сокращенный ответ сервера:

Я пробовал несколько способов, предложенных на этом сайте, но я просто не мог заставить его работать.

Буду очень признателен за любую помощь по этой теме c. Я новичок ie в Google Script.

Вот мой код:

//=================================================
//  Email Employment Letter as Word format, not PDF
//=================================================

function EmailCertAsWordDoc(requestor, name, newCopyID) {
  var email = requestor; 
  var id = DocumentApp.openById(newCopyID);
  var subject = "Auto-generated Employment Letter"; 
  var body = "\n\nAttached is the Employment Letter that you created for " + name + ". \n\n\n\n\n ";

  var url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + id + "&format=docx&access_token=" + ScriptApp.getOAuthToken();
  var docx = UrlFetchApp.fetch(url).getBlob();

  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, subject, {
      Body: body,
      attachments:[docx]     
    });
}

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Вот мой последний рабочий код после следования совету зиганочки:

//=================================================
//  Email Employment Letter as Word format, not PDF
//=================================================

function EmailCertAsWordDoc(email, name, newCopyID) {

  var subject = "Auto-generated Employment Letter"; 
  var body = "\n\nAttached is the Employment Letter that you created for " + name + ". \n\n\n\n\n ";  
  var url = 'https://docs.google.com/feeds/download/documents/export/Export?id=' + newCopyID + '&exportFormat=docx';
  var options = {
      headers: {
      Authorization: "Bearer " + ScriptApp.getOAuthToken()
      },
      muteHttpExceptions: true
      }
  var response = UrlFetchApp.fetch(url, options);
  var doc = response.getBlob();

  //Create the docx file in my TEMP folder in Google Drive and send
  var file = DriveApp.createFile(doc).setName('Employment Letter - '+ name + '.docx');
  DriveApp.getFolderById('<ID of my TEMP folder in Google Drive>').addFile(file);   
  var blob = DriveApp.getFileById(file.getId());

  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, subject, body, {
      Body: body,
      attachments:[blob]     
    });  

  //Remove the docx file from the TEMP folder
  DriveApp.getFileById(file.getId()).setTrashed(true);
}
0 голосов
/ 06 января 2020

Две вещи:

  1. Чтобы получить URL экспорта, вам нужно использовать идентификатор файла , а не сам файл - в вашем случае это newCopyID

  2. Отправка файлов слов в виде вложений, к сожалению, немного сложнее, чем в формате PDF. Чтобы это работало, вы можете создать файл текста на своем диске и затем отправить его в виде URL-адреса в теле письма.

Пример:

function EmailCertAsWordDoc(requestor, name, newCopyID) {
  var email = requestor; 
  var fileName = DocumentApp.openById(newCopyID).getName();
  var subject = "Auto-generated Employment Letter"; 
  var body = "\n\nAttached is the Employment Letter that you created for " + name + ". \n\n\n\n\n ";

  var url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + newCopyID + "&format=docx&access_token=" + ScriptApp.getOAuthToken();
  var docx = UrlFetchApp.fetch(url).getBlob();
  var file=DriveApp.createFile(docx).setName(fileName).getUrl();
  body+=" "+file;
  if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail(email, subject, body);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...