MailApp.sendEmail 从付费帐户发送带有附件的电子邮件时无法正常工作
MailApp.sendEmail not working correctly when sending email with attachments from a paid account
function printForward() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheets()[3];
// if you change the number, change it also in the parameters below
var shName = sh.getName()
var ssname = ss.getName();
var length = ssname.length;
var date = ssname.substring(0,length-15);
const body = "All, <br><br>Attached is the invoice for the week of "+ date+"."+"<br><br> Thank you, <br> Elizabeth";
sendSpreadsheetToPdf(3, shName, ss.getRange('Constants!T5').getValue(),"Invoices "+date, body, date);
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody, invcdate) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=A4' // paper size
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=true&printtitle=false&pagenumbers=true' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
}
}
var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName("Forward Air Invoice "+invcdate+ '.pdf');
if (email) {
var mailOptions = {
attachments:blob, htmlBody:htmlbody
}
MailApp.sendEmail(
email,
subject,
"html content only",
mailOptions);
}
//save PDF
const nameFile = "Forward " + invcdate + ".pdf";
var forwardFolder = DriveApp.getFolderById(ID);
forwardFolder.createFile(blob); //HERE IS WHERE THE PDF FILE IS SAVED
我有上面的代码,它应该通过电子邮件发送电子表格的 pdf,然后将 pdf 的副本保存在文件夹中。当我 运行 脚本时,电子邮件正确发送并且电子表格的 pdf 保存到文件夹中。但是,当 spreadsheet/script 运行 脚本的所有者发送了一封电子邮件,但附加了 html 文件而不是 pdf。所以发送了一堆文本,而不是电子表格。我不知道为什么会这样。
附件必须在数组中。也许尝试不同的配置如下:
MailApp.sendEmail(objectOfSettings);
代码:
var mailOptions = {};
var arrayOfAttachments = [];
if (blob) {
arrayOfAttachments.push(blob);
mailOptions.attachments = arrayOfAttachments;
}
if (htmlbody) {
mailOptions.htmlBody = htmlbody;
}
if (email) {
mailOptions.to = email;
mailOptions.subject = subject;
MailApp.sendEmail(mailOptions);
}
为了使用 FROM 选项,您需要在 Gmail 中进行一些更改
设置。您将需要设置别名电子邮件,AND/OR 确认您拥有的电子邮件地址。
您可以从 non-Google 电子邮件地址发送电子邮件,但您需要确认您拥有该电子邮件帐户。该确认过程在您的 Gmail 设置中的“帐户或帐户和导入”选项卡下启动。如果您有 Workspace 帐户,并且想以别名发送电子邮件,则需要打开 Workspace 管理控制台,
https://admin.google.com/AdminHome
- 以管理员身份登录。
- 转到应用程序 > Google 应用程序 > Gmail > 高级设置。
- 搜索“允许 per-user 出站网关”并启用此设置。
- 单击“保存”按钮保存更改。
返回主管理控制台
现在执行以下操作:
点击“用户”
单击用户帐户的名称
添加别名。
这是 link 一些 Google 帮助信息。
function printForward() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheets()[3];
// if you change the number, change it also in the parameters below
var shName = sh.getName()
var ssname = ss.getName();
var length = ssname.length;
var date = ssname.substring(0,length-15);
const body = "All, <br><br>Attached is the invoice for the week of "+ date+"."+"<br><br> Thank you, <br> Elizabeth";
sendSpreadsheetToPdf(3, shName, ss.getRange('Constants!T5').getValue(),"Invoices "+date, body, date);
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody, invcdate) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;
var url_base = spreadsheet.getUrl().replace(/edit$/,'');
var url_ext = 'export?exportFormat=pdf&format=pdf' //export as pdf
+ (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId))
// following parameters are optional...
+ '&size=A4' // paper size
+ '&portrait=true' // orientation, false for landscape
+ '&fitw=true' // fit to width, false for actual size
+ '&sheetnames=true&printtitle=false&pagenumbers=true' //hide optional headers and footers
+ '&gridlines=false' // hide gridlines
+ '&fzr=false'; // do not repeat row headers (frozen rows) on each page
var options = {
headers: {
'Authorization': 'Bearer ' + ScriptApp.getOAuthToken(),
}
}
var response = UrlFetchApp.fetch(url_base + url_ext, options);
var blob = response.getBlob().setName("Forward Air Invoice "+invcdate+ '.pdf');
if (email) {
var mailOptions = {
attachments:blob, htmlBody:htmlbody
}
MailApp.sendEmail(
email,
subject,
"html content only",
mailOptions);
}
//save PDF
const nameFile = "Forward " + invcdate + ".pdf";
var forwardFolder = DriveApp.getFolderById(ID);
forwardFolder.createFile(blob); //HERE IS WHERE THE PDF FILE IS SAVED
我有上面的代码,它应该通过电子邮件发送电子表格的 pdf,然后将 pdf 的副本保存在文件夹中。当我 运行 脚本时,电子邮件正确发送并且电子表格的 pdf 保存到文件夹中。但是,当 spreadsheet/script 运行 脚本的所有者发送了一封电子邮件,但附加了 html 文件而不是 pdf。所以发送了一堆文本,而不是电子表格。我不知道为什么会这样。
附件必须在数组中。也许尝试不同的配置如下:
MailApp.sendEmail(objectOfSettings);
代码:
var mailOptions = {};
var arrayOfAttachments = [];
if (blob) {
arrayOfAttachments.push(blob);
mailOptions.attachments = arrayOfAttachments;
}
if (htmlbody) {
mailOptions.htmlBody = htmlbody;
}
if (email) {
mailOptions.to = email;
mailOptions.subject = subject;
MailApp.sendEmail(mailOptions);
}
为了使用 FROM 选项,您需要在 Gmail 中进行一些更改 设置。您将需要设置别名电子邮件,AND/OR 确认您拥有的电子邮件地址。 您可以从 non-Google 电子邮件地址发送电子邮件,但您需要确认您拥有该电子邮件帐户。该确认过程在您的 Gmail 设置中的“帐户或帐户和导入”选项卡下启动。如果您有 Workspace 帐户,并且想以别名发送电子邮件,则需要打开 Workspace 管理控制台,
https://admin.google.com/AdminHome
- 以管理员身份登录。
- 转到应用程序 > Google 应用程序 > Gmail > 高级设置。
- 搜索“允许 per-user 出站网关”并启用此设置。
- 单击“保存”按钮保存更改。
返回主管理控制台 现在执行以下操作:
点击“用户” 单击用户帐户的名称 添加别名。 这是 link 一些 Google 帮助信息。