google-apps-script - 根据单元格中的值发送带有或不带有内联图像的电子邮件
问题描述
下午好。我正在使用下面的代码发送电子邮件,其中包含通过 ID 从电子表格中的单元格中检索到的内联图像。但是,如果具有内嵌图像 ID 的单元格为空白,则脚本不会发送消息。有没有办法调整此代码以使其在两种情况下都能正常工作?(在单元格中有和没有 ID 值)谢谢
var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
var lr = ss.getLastRow();
var quotaLeft = MailApp.getRemainingDailyQuota();
//Logger.log(quotaLeft);
if((lr-1) > quotaLeft) {
Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " + (lr-1) + " emails. Emails were not send.");
} else {
for (var i = 2;i<=lr;i++){
var currentEmail = ss.getRange(i, 1).getValue();
var currentSubject = ss.getRange(i, 2).getValue();
var templateText = ss.getRange(i, 3).getValue();
var currentname = ss.getRange(i, 4).getValue();
var reply = ss.getRange(i, 5).getValue();
Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));
var image = DriveApp.getFileById(ss.getRange(i, 6).getValue()).getBlob();
var message = templateText.replace("{name}",currentname);
message += "<br/><br/><img src=\"cid:sampleImage\">";
MailApp.sendEmail({
to: currentEmail,
replyTo: reply,
subject: currentSubject,
htmlBody: message,
inlineImages: {sampleImage: image},
});
} //close for loop
} //close else statement
} //close sendEmails```
解决方案
这应该这样做。
如果图像 ID 不正确或文件格式不正确,这些更改也会捕获和可能发生的错误。
function sendMail(){
var ss = SpreadsheetApp.getActive().getSheetByName('SendMail')
var lr = ss.getLastRow();
var quotaLeft = MailApp.getRemainingDailyQuota();
//Logger.log(quotaLeft);
if((lr-1) > quotaLeft) {
Browser.msgBox("You have " + quotaLeft + " left and you're trying to send " +
(lr-1) + " emails. Emails were not send.");
} else {
for (var i = 2;i<=lr;i++){
var currentEmail = ss.getRange(i, 1).getValue();
var currentSubject = ss.getRange(i, 2).getValue();
var templateText = ss.getRange(i, 3).getValue();
var currentname = ss.getRange(i, 4).getValue();
var reply = ss.getRange(i, 5).getValue();
var imageFile = ss.getRange(i, 6).getValue();
var image = ""
Logger.log("Cell: " + ss.getRange(i, 6).getA1Notation());
Logger.log("Image: "+ DriveApp.getFileById(ss.getRange(i, 6).getValue()));
if(imageFile){
try{
image = DriveApp.getFileById(imageFile).getBlob();
} catch (e) {
templateText += "<p>Image merge failed: " + e;
}
}
var message = templateText.replace("{name}",currentname);
message += "<br/><br/><img src=\"cid:sampleImage\">";
if(image){
MailApp.sendEmail({
to: currentEmail,
replyTo: reply,
subject: currentSubject,
htmlBody: message,
inlineImages: {sampleImage: image},
});
} else {
MailApp.sendEmail({
to: currentEmail,
replyTo: reply,
subject: currentSubject,
htmlBody: message,
});
}
} //close for loop
} //close else statement
} //close sendEmails```
推荐阅读
- c# - Mono.Cecil - 如何知道一个方法有变量参数?
- mysql - SQL - 在 'where' 'over (partition by...)' 中使用
- c++ - 试图从向量中删除特定对象并失败
- javascript - 使用 CSS Sprites:多次复制一张大图像会给客户端带来负担吗?
- r - 将具有缩放值的新列添加到列表中的所有数据框
- c - 使用 getw() 读取问题
- jquery - preventDefault 和 oncontextmenu
- javascript - JS:复杂的承诺链
- android - 应用程序崩溃并出现错误 INVALID_STATE_ERR
- c# - 基于同一模板处理多个 ASP.NET 网站的代码