解决通过 API 发送电子邮件的未知错误
resolving unknown error to send email through API
我是 API 脚本的新手,正在尝试向 Sheet sendTo!B2 中列出的地址发送电子邮件。
组成的消息在 composeMessage!A2 之后。我的脚本给出了一个未知错误。我究竟做错了什么?我将不胜感激
函数 composeNsend()
{
// Fetch the message
var messageRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("composeMessage").getRange("A2");
var message = messageRange.getValue();
{
// Fetch the email address
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sendTo").getRange("B2");
var emailAddress = emailRange.getValue();
// Send Email.
var message = message;
var subject = 'ALERT for New 365d Low';
MailApp.sendEmail(emailAddress, subject, message);
}
}
我写的消息确实有空行
谢谢
您的代码中间有一些额外的括号。删除它们,该功能将起作用。编辑代码以遍历行并标记已发送的行。下面的代码对我有用:
function composeNsend()
{
let curr_ss = SpreadsheetApp.getActiveSpreadsheet();
let subject = 'ALERT for New 365d Low';
let message_sheet = curr_ss.getSheetByName("composeMessage");
let last_message_row = message_sheet.getLastRow();
//get 2D array of values
let message_array = message_sheet.getRange("A2:A"+last_message_row.toString()).getValues();
//convert to 1D array
let messages = message_array.map(itm=>itm[0]);
let email_sheet = curr_ss.getSheetByName("sendTo")
let last_email_row = email_sheet.getLastRow();
//get 2D array of values
let email_array = email_sheet.getRange("B2:B"+last_email_row.toString()).getValues();
//convert to 1D array
let emails =email_array.map(itm=>itm[0]);
//get flags column
let flags = email_sheet.getRange("C2:C"+last_message_row.toString()).getValues().map(itm => itm[0]);
//empty array for new flag values
let new_flags = [];
//choose lowest of last rows in messages and emails, don't send emails without body or email address
let last_row = Math.min(last_email_row,last_message_row);
//for loop to send emails, add flag on column C for each email sent
//subtract 1 from last row because array starts from second row
for(let i=0; i<last_row-1; i++){
let curr_flag = flags[i];
//send email only for rows without sent flag
if(curr_flag != 'sent'){
let message = messages[i];
let emailAddress=emails[i];
MailApp.sendEmail(emailAddress, subject, message);
}
new_flags.push(['sent']);
}
//write new flags to sheet
email_sheet.getRange("C2:C"+last_row.toString()).setValues(new_flags);
}
我是 API 脚本的新手,正在尝试向 Sheet sendTo!B2 中列出的地址发送电子邮件。 组成的消息在 composeMessage!A2 之后。我的脚本给出了一个未知错误。我究竟做错了什么?我将不胜感激
函数 composeNsend()
{
// Fetch the message
var messageRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("composeMessage").getRange("A2");
var message = messageRange.getValue();
{
// Fetch the email address
var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sendTo").getRange("B2");
var emailAddress = emailRange.getValue();
// Send Email.
var message = message;
var subject = 'ALERT for New 365d Low';
MailApp.sendEmail(emailAddress, subject, message);
}
}
我写的消息确实有空行
谢谢
您的代码中间有一些额外的括号。删除它们,该功能将起作用。编辑代码以遍历行并标记已发送的行。下面的代码对我有用:
function composeNsend()
{
let curr_ss = SpreadsheetApp.getActiveSpreadsheet();
let subject = 'ALERT for New 365d Low';
let message_sheet = curr_ss.getSheetByName("composeMessage");
let last_message_row = message_sheet.getLastRow();
//get 2D array of values
let message_array = message_sheet.getRange("A2:A"+last_message_row.toString()).getValues();
//convert to 1D array
let messages = message_array.map(itm=>itm[0]);
let email_sheet = curr_ss.getSheetByName("sendTo")
let last_email_row = email_sheet.getLastRow();
//get 2D array of values
let email_array = email_sheet.getRange("B2:B"+last_email_row.toString()).getValues();
//convert to 1D array
let emails =email_array.map(itm=>itm[0]);
//get flags column
let flags = email_sheet.getRange("C2:C"+last_message_row.toString()).getValues().map(itm => itm[0]);
//empty array for new flag values
let new_flags = [];
//choose lowest of last rows in messages and emails, don't send emails without body or email address
let last_row = Math.min(last_email_row,last_message_row);
//for loop to send emails, add flag on column C for each email sent
//subtract 1 from last row because array starts from second row
for(let i=0; i<last_row-1; i++){
let curr_flag = flags[i];
//send email only for rows without sent flag
if(curr_flag != 'sent'){
let message = messages[i];
let emailAddress=emails[i];
MailApp.sendEmail(emailAddress, subject, message);
}
new_flags.push(['sent']);
}
//write new flags to sheet
email_sheet.getRange("C2:C"+last_row.toString()).setValues(new_flags);
}