2016-05-14 2 views
0

[email protected]После того, как я боролся некоторое время с этим, я обращаюсь за помощью к толпе.email Google Doc в виде вложения в формате PDF

Я пытаюсь прикрепить 2 Документы Google к электронному письму в формате PDF. Я вижу много примеров в отношении Google Таблиц и успешно мог отправлять электронные копии копий в формате PDF, но мне не удалось отправить их в Документы.

В нескольких разных сценариях вложения PDF являются либо копией моего original template Doc, либо снимком изображения "One Account. All of Google" sign in page. Когда я просматриваю ссылки, которые сгенерированы (Logger.log) и их используют, загружается копия the correct Doc.

Ниже приведен пример моего сценария, в котором я пытаюсь создать вложения электронной почты. См. Функцию emailDocAsPDF() в нижней части

Заблаговременно за любые рекомендации по этой проблеме.

function myFunctionUpdated() { 

    var testTemplateId = searchDriveFile('Test Template'); 
    Logger.log('test template id = ' + testTemplateId); 

    var fileName = 'Copy of Test Template' 
    Logger.log(fileName); 

    DriveApp.getFileById(testTemplateId).makeCopy(fileName); 

    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var range = ss.getRange(1, 1, 3, 2).getValues(); 

    var copyNewTemplateId = searchDriveFile(fileName); 

    var copyTemplate = DocumentApp.openById(copyNewTemplateId); 
    var copyTemplateBody = copyTemplate.getBody().editAsText(); 

    for (i=0; i<range.length; i++) { 
     copyTemplateBody.replaceText(range[i][0], range[i][1]); 
    } 

    copyTemplate.saveAndClose(); 

    emailDocAsPDF(fileName) 
} 


// Searched Google Drive for a file name and returns the file ID. 
function searchDriveFile(fileName) { 
    var files = DriveApp.searchFiles(
    'title = "'+ fileName +'"'); 
    while (files.hasNext()) { 
    var file = files.next(); 
    var id = file.getId(); 
    return id; 
    } 
} 


// Send document in an email as PDF 
function emailDocAsPDF(fileName) { 

    var staticDoc = 'FILE-ID'; 

    var attachmentDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf"); 
    Logger.log("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf"); 

    var attachmentStaticDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf"); 
    Logger.log("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf"); 

    var fileBlob = []; 

    fileBlob[0] = attachmentDoc.getBlob().getAs('application/pdf'); 
    fileBlob[1] = attachmentStaticDoc.getBlob().getAs('application/pdf'); 

    var body = "Bird is the WORD!! <br>" + 
    "<a href='http://www.example.com'>Visit Example</a>"; 

    if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail("[email protected]", "Test Documents Email", body, { 
     htmlBody: body, 
     attachments:[fileBlob[0],fileBlob[1]]  
    }); 

} 

EDIT - Успешные обновления с кодом, представленной Sandwich.

// Send document in an email as PDF 
function emailDocAsPDF(fileName) { 

    var staticDoc = 'FILE-ID'; 

    var copyTemplateId = searchDriveFile(fileName); 

    var blobs = []; 

    var doc = DriveApp.getFileById(copyTemplateId); 
    blobs[0] = doc.getBlob().getAs('application/pdf').setName('MyAttachment1.pdf'); 

    var doc = DriveApp.getFileById(staticDoc); 
    blobs[1] = doc.getBlob().getAs('application/pdf').setName('MyAttachment2.pdf'); 

    var zipBlob = Utilities.zip(blobs).setName('Documents.zip'); 

    var recipient = '[email protected]'; 
    var subject = 'Test Email'; 
    var body = 'Bird is the WORD'; 
    MailApp.sendEmail(recipient, subject, body, {attachments: [zipBlob]}); 
} 
+0

Кроме того, я забыл упомянуть, что 'copyTemplate.saveAndClose(); ' был необходим после внесения обновлений в документ-шаблон. Это позволило мне отправить обновленный документ по электронной почте. – onerockscott

ответ

0

Чтобы прикрепить какой-либо документ в качестве PDF, вызовите getBlob на файл, указать тип содержимого, как с .getAs('application/pdf') и, возможно, установить имя с setName. Вот и все:

var doc = DriveApp.getFileById('ID_HERE'); 
var blob = doc.getBlob().getAs('application/pdf').setName('MyAttachment.pdf'); 
var recipient = '[email protected]'; 
var subject = 'Email subject'; 
var body = 'Text here'; 
MailApp.sendEmail(recipient, subject, body, {attachments: [blob]}); 

Вы пытались использовать «экспорт в PDF с помощью URL запроса», который плохо документированная особенности, что иногда полезно для листов (установка границ экспортируемой области), но не являются необходимым для Документов , если он даже существует для них. Вышеуказанный метод должен работать на любой контент, хранящийся на Google Диске.

Кстати, предпочтительно использовать MailApp вместо GmailApp при отправке электронной почты, поскольку он поддерживает уровень авторизации по мере необходимости: отправка электронной почты. С помощью GmailApp скрипту также предоставляется разрешение на доступ и удаление всех ваших существующих писем, что нецелесообразно для сценариев, составленных из проб, ошибок и копирования кода из Интернета.

+0

Благодарим вас за помощь в отправке по электронной почте Документов и ваших рекомендаций по 'MailApp' /' GmailApp'. Теперь все работает отлично! – onerockscott

Смежные вопросы