当前位置: 首页 > 知识库问答 >
问题:

我正试图用一个脚本将谷歌硬盘附件发送到不同的电子邮件地址,但很难让它正常工作

杨超
2023-03-14

我是新的编码,并希望自动发送电子邮件附件。基本上,我想做的是发送一条消息和谷歌驱动器附件到我的电子表格中的特定电子邮件地址。每个附件(谷歌驱动器链接)对于每个电子邮件地址都是不同的,我在电子表格中列出了所有内容。

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

  • A1全名
  • B1名字
  • C1姓
  • D1电子邮件地址
  • E1文件附件(谷歌硬盘链接)
  • 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中的约翰·苹果在E2中有附件X,而A3中的米克·奥兰治在E3中有附件Y,等等...数据的范围下降到130行,但是如果有一些东西总是得到这个范围,直到有数据(不管行数如何),那就太好了。

有人知道怎么做吗?

非常感谢提前!!

共有1个答案

康恩
2023-03-14

如果我理解正确,您当前的问题与上一个问题的不同之处在于:

  • 消息正文以“Hello{Full Name}”开头

考虑到所有这些,我重新设计了我在你之前的问题中提出的解决方案,以便它做你现在假装的事情(阅读内联注释,看看代码在做什么,一步一步):

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方法,因此要获取文件,代码首先使用regex从url中提取文件ID,然后调用getFileById。

如果这对你有用,请告诉我。

 类似资料:
  • 我有一个电子表格,存储工作表1上的任务。当一个任务完成时,就会发送一封电子邮件。表2保存了发送到、抄送和回复的特定电子邮件地址。我可以循环浏览第2页并获得每一栏的电子邮件地址。我想能够得到这些电子邮件地址到我的选项发送电子邮件在MailApp。无法从工作表2的循环中获取电子邮件地址。请参阅下面的代码。任何帮助都将不胜感激。

  • 我已经建立了一个谷歌表单,我的回复被记录在一个电子表格中。理想情况下,我希望回复也通过电子邮件发送。

  • 是否可以在Gmail邮箱中搜索特定的标签/和或主题,并从电子邮件正文中提取电子邮件地址,然后保存到电子表格中? 电子邮件正文示例: 非常感谢,罗德

  • 问题内容: 我正在尝试通过输入URL向指定用户发送电子邮件,但出现以下错误: 第383行的AbstractSmtpTransport.php中的Swift_TransportException:预期的响应代码为250,但代码为“ 530”,消息为“ 530 5.7.1要求身份验证” 到目前为止,我只是试图使其与Gmail一起使用。我该如何工作? 这是我到目前为止的内容: mail.php 这是我在

  • 我有谷歌发票电子表格,我用vlookup公式从其他(数据)表中获取数据。只有我需要在发票表中输入行号。所以我创建了一个循环脚本,其中数据表中的自动行号将输入到发票表中,并发送带有PDF附件的电子邮件。当运行该脚本时,请正确输入每行的行号,但电子邮件不会发送。

  • 我正在尝试将一些带有硬编码电子邮件数据的测试代码直接插入到我的nodemailer服务器.js文件中,以开始使用基本的工作示例。请参阅以下网址中的“测试代码”部分: http://jsbin.com/sibubi/1/edit?html,js,控制台 在没有测试代码的情况下,Server.js加载没有问题。但是,当包含“测试代码”部分时,会出现错误。它抱怨“不支持的配置”,并建议降级,但我从nod