将两个不同的 pdf 附加到电子邮件
Attach two different pdfs to email
我通过 Google 表格收到订单。我发送了一封带有 (a) 个性化 pdf 的自动电子邮件,但我还想在来自 Google Drive 文件夹的电子邮件中添加一个 (b) pdf(条款和服务,所有订单都相同).
(A) 工作正常,但我不确定如何添加 (B)。
这是个性化的pdf:
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
sendEmail(e.namedValues['email'][0],pdfFile);
}
function sendEmail(email,pdfFile){
GmailApp.sendEmail(email, "Order received","Please find attached your order and terms of services", {
attachments: [pdfFile],
name: 'MyCompany'
});
}
function createPDF(info) {
const pdfFolder = DriveApp.getFolderById("XXXXXXXXX");
const tempFolder = DriveApp.getFolderById("XXXXXXXXX");
const templateDoc = DriveApp.getFileById("XXXXXXXXX");
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
body.replaceText("{fn}", info['First name'][0]);
body.replaceText("{ln}", info['Last name'][0]);
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
const pdfFile = pdfFolder.createFile(blobPDF).setName(info['First name'][0] + " " + info['Last name'][0]);
tempFolder.removeFile(newTempFile);
return pdfFile;
}
所以我创建了 const pdfTerms = DriveApp.getFileById("XXXXXXXXX");
并将其添加到 sendEmails
的 attachments: [pdfFile,pdfTerms]
但是它不起作用。
解释:
问题是您的方法中的 pdfTerms
不是 pdf
而是 file
.
类型的对象
要将 file
转换为 pdf
,您需要这样做:
const pdfTerms_file = DriveApp.getFileById("XXXXXXXXX"); // type of file
const pdfTerms = pdfTerms_file.next().getAs(MimeType.PDF); // pdf
始终假定存在具有此特定 ID 的文件。
解决方案:
修改afterFormSubmit
和sendEmail
如下:
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
const pdfTerms_file = DriveApp.getFileById("XXXXXXXXX"); // type of file
const pdfTerms = pdfTerms_file.next().getAs(MimeType.PDF); // pdf
sendEmail(e.namedValues['email'][0],pdfFile,pdfTerms);
}
function sendEmail(email,pdfFile,pdfTerms){
GmailApp.sendEmail(email, "Order received","Please find attached your order and terms of services", {
attachments: [pdfFile,pdfTerms],
name: 'MyCompany'
});
}
参考文献:
我通过 Google 表格收到订单。我发送了一封带有 (a) 个性化 pdf 的自动电子邮件,但我还想在来自 Google Drive 文件夹的电子邮件中添加一个 (b) pdf(条款和服务,所有订单都相同).
(A) 工作正常,但我不确定如何添加 (B)。
这是个性化的pdf:
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
sendEmail(e.namedValues['email'][0],pdfFile);
}
function sendEmail(email,pdfFile){
GmailApp.sendEmail(email, "Order received","Please find attached your order and terms of services", {
attachments: [pdfFile],
name: 'MyCompany'
});
}
function createPDF(info) {
const pdfFolder = DriveApp.getFolderById("XXXXXXXXX");
const tempFolder = DriveApp.getFolderById("XXXXXXXXX");
const templateDoc = DriveApp.getFileById("XXXXXXXXX");
const newTempFile = templateDoc.makeCopy(tempFolder);
const openDoc = DocumentApp.openById(newTempFile.getId());
const body = openDoc.getBody();
body.replaceText("{fn}", info['First name'][0]);
body.replaceText("{ln}", info['Last name'][0]);
openDoc.saveAndClose();
const blobPDF = newTempFile.getAs(MimeType.PDF);
const pdfFile = pdfFolder.createFile(blobPDF).setName(info['First name'][0] + " " + info['Last name'][0]);
tempFolder.removeFile(newTempFile);
return pdfFile;
}
所以我创建了 const pdfTerms = DriveApp.getFileById("XXXXXXXXX");
并将其添加到 sendEmails
的 attachments: [pdfFile,pdfTerms]
但是它不起作用。
解释:
问题是您的方法中的 pdfTerms
不是 pdf
而是 file
.
要将 file
转换为 pdf
,您需要这样做:
const pdfTerms_file = DriveApp.getFileById("XXXXXXXXX"); // type of file
const pdfTerms = pdfTerms_file.next().getAs(MimeType.PDF); // pdf
始终假定存在具有此特定 ID 的文件。
解决方案:
修改afterFormSubmit
和sendEmail
如下:
function afterFormSubmit(e) {
const info = e.namedValues;
const pdfFile = createPDF(info);
const pdfTerms_file = DriveApp.getFileById("XXXXXXXXX"); // type of file
const pdfTerms = pdfTerms_file.next().getAs(MimeType.PDF); // pdf
sendEmail(e.namedValues['email'][0],pdfFile,pdfTerms);
}
function sendEmail(email,pdfFile,pdfTerms){
GmailApp.sendEmail(email, "Order received","Please find attached your order and terms of services", {
attachments: [pdfFile,pdfTerms],
name: 'MyCompany'
});
}
参考文献: