我正在尝试使用脚本将Google云端硬盘附件发送到不同的电子邮件地址,但仍在努力使其工作

我是编码的新手,想自动发送带有附件的电子邮件。基本上,我想做的是将邮件和Google云端硬盘附件发送到电子表格中的特定电子邮件地址。每个电子邮件地址的每个附件(Google驱动器链接)都不相同,我在电子表格中列出了所有内容。

电子表格由三张纸组成,我只想从第一张纸中获取信息(称为完整数据)。列的结构如下:

  • A1全名
  • B1名
  • C1姓氏
  • D1电子邮件地址
  • E1文件附件(Google驱动器链接)
  • F1日期
  • G1状态
  • H1消息
  • 已发送I1电子邮件吗?

我想发送一封电子邮件,其模板以“ Hello {Full Name}”开头,并在下面的行中开始显示消息。

这是我现在拥有的代码:

// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';

/**
 * Sends non-duplicate emails with data from the current spreadsheet.
 */
function sendEmails2() {
  var sheet = Spreadsheetapp.getactiveSheet();
  var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
  var startCol = 1;
  var numCols = 4; // Number of columns to process (should include column D)
// Fetch the range of cells A2:D
var dataRange = sheet.getRange(startRow,startCol,numRows,numCols);
  var data = dataRange.getvalues();
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var emailaddress = row[3]; // Third column
    var message = row[7]; // Eigth column
    var emailSent = row[8]; // Ninth column
    if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates
      var subject = 'Sending emails from a Spreadsheet';
      MailApp.sendEmail(emailaddress,subject,message);
      sheet.getRange(startRow + i,8).setvalue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      Spreadsheetapp.flush();
    }
  }
}

我意识到我没有为附件设置变量。附件应取自E列(对应于该行)。例如,A2中的John Apple在E2中具有附件X,而A3中的Mick Orange在E3中具有附件Y,依此类推...数据范围缩小到130行,但是总能得到一些东西会很棒直到有数据为止的范围(无论行数如何)。

有人对如何进行这项工作有想法吗?

非常感谢!

miyavi16 回答:我正在尝试使用脚本将Google云端硬盘附件发送到不同的电子邮件地址,但仍在努力使其工作

如果我对您的理解正确,那么您当前的问题与your previous one的不同之处在于:

  • 邮件正文以“ Hello {Full Name}”开头。
  • 您不是要查找与工作表中相同名称的文件,而是要查找具有特定URL的文件。
  • 从中获取数据的列不同。

考虑到所有这些因素后,我重新设计了您在上一个问题中提出的解决方案,使其能够完成您现在装作的工作(阅读内联注释,逐步了解代码的作用):

var EMAIL_SENT = "EMAIL_SENT";

function sendEmails2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Full Data");
  var startRow = 2;  // First row of data to process
  var numRows = sheet.getLastRow() - startRow + 1; // Number of rows to process
  var startCol = 1;
  var numCols = 9; // Number of columns to process (should include column D)
  // Fetch the range of cells A2:D
  var dataRange = sheet.getRange(startRow,startCol,numRows,numCols);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; i++) {
    var row = data[i];
    var emailAddress = row[3];
    var fullname = row[0];
    var messageBody = row[7];
    var message = "Hello ".concat(fullname,"\n",messageBody); // Creating message body
    var emailSent = row[8];
    var fileURL = row[4];
    var fileId = fileURL.match(/[-\w]{25,}/); // Extracts file id from file url
    if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
      var subject = "Sending emails from a Spreadsheet";
      var file = DriveApp.getFileById(fileId);
      MailApp.sendEmail(emailAddress,subject,message,{
        attachments: [file],// No need to use getAs if your file is already a PDF
        name: 'Custom email Team'
      });
      sheet.getRange(startRow + i,9).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is interrupted
      SpreadsheetApp.flush();
    }
  }
}

DriveApp没有getFileByUrl方法,因此要获取文件,代码首先使用正则表达式从URL中提取文件ID,然后调用getFileById

让我知道这是否对您有用。

本文链接:https://www.f2er.com/3110358.html

大家都在问