【问题标题】:Google sheet - sending emails谷歌表 - 发送电子邮件
【发布时间】:2015-04-15 07:22:15
【问题描述】:

我以前做过这篇文章,但我确实得到了期待已久的帮助。让我借此机会尽量说清楚。 1. 我有这个谷歌表格 ID 1UJVQGlCpsxtqN-IkRFFgHEnzNaq-HQDaiw-hte5j3LY

Email Address   Name   Mark1    Mark2    Mark3  Remark  Email Sent
abc@gmail.com   John    34      21       34     Fair    
def@gmail.com   Sam     23      9        78     fair    
  1. 模板文档。 ID 15SP7mxyKYF6ptuRfrudNsvtJuezMTOBUL_cRCFbBIcI

亲爱的键名

标记1 标记2 标记3 keyMark_1 keyMark_2 keyMark_3

备注 关键备注

  1. 代码。

    // Email_Sent 写在 G 列中,用于发送电子邮件的行 // 已经发送成功。 var EMAIL_SENT = "EMAIL_SENT";

    function sendEmails2() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var startRow = 2;  // First row of data to process
      var numRows = 5;   // Number of rows to process
      var dataRange = sheet.getRange(startRow, 1, numRows, 6)
      var ss = SpreadsheetApp.openById('1UJVQGlCpsxtqN-IkRFFgHEnzNaq-HQDaiw-hte5j3LY'); 
      var sheet = ss.getSheetByName('Email Spreadsheet Data');
      //var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), sheet.getLastColumn());
      var copyId = DocsList.getFileById('15SP7mxyKYF6ptuRfrudNsvtJuezMTOBUL_cRCFbBIcI')
        .makeCopy(name)
        .getId();
    
      // Fetch values for each row in the Range.
      var data = dataRange.getValues();
      for (var i = 0; i < data.length; ++i){
      //for (var j = 0; j < startRow; ++j) {
        var row = data[i];
        var emailAddress = row[0];  // First column
        var name = row[1]; // Second column
        var Mark1 = row[2]; // Third column
        var Mark2 = row[3]; // Fourth column
        var Mark3 = row[4]; // 
        var remark = row[5]; // 
        var emailSent = row[6]; // 
        var static_copy = ('goins@mu.ac.ke');
    
        // Open the temporary document
      var copyDoc = DocumentApp.openById(copyId);
      // Get the document’s body section
      var copyBody = copyDoc.getActiveSection();
    
    // Replace place holder keys,in google doc template. Create a blank document with the number "1,2,3....", and it will replace this text with value
      copyBody.replaceText('keyName', name)
      copyBody.replaceText('keyMark_1', Mark1)
      copyBody.replaceText('keyMark_2', Mark2)
      copyBody.replaceText('keyMark_3', Mark3)
      copyBody.replaceText('keyRemark', remark)
    
    // Save and close the temporary document
      copyDoc.saveAndClose();
    
    // Convert temporary document to PDF
      var pdf = DocsList.getFileById(copyId).getAs("application/pdf");
    
    // Attach PDF and send the email
      var subject = "Profile";
      var body = "<HTML><BODY>"
                 + "Dear "+ name +",<br>"
                 + "<br>"
                 + " Regards <br>"
                 + "<br>"
                 + "</HTML></BODY>";
    
      MailApp.sendEmail(emailAddress, subject, body, 
                       {htmlBody: body, attachments: pdf, cc: static_copy,});
     //if (emailSent != EMAIL_SENT) {  // Prevents sending duplicates
          //var subject = "Sending emails from a Spreadsheet";
         // MailApp.sendEmail(emailAddress, subject, {htmlBody: body, attachments: pdf, cc: static_copy,});
        //sheet.getRange(startRow + i, 6).setValue(EMAIL_SENT);
       // Delete temp file
      DocsList.getFileById(copyId).setTrashed(true);  
          } // Make sure the cell is updated right away in case the script is interrupted
         SpreadsheetApp.flush();
        }
    

当我执行上述脚本时,带有 John 标记的电子邮件附件会同时发送到 adc@gmail.com 和 efg@gmail.com。 我需要您的帮助来解决这个问题,以便我能够向每个学生发送一个包含自己结果的电子邮件附件。

请帮助

萨米。

【问题讨论】:

  • 您正在删除文件(副本 ID)并重新打开它 - 这怎么可能?
  • @Ark 我在 DocsList.getFileById(copyId).setTrashed(true 以便能够填写临时文档。评论该行后,它会向所有邮件发送重复的附件...
  • 抱歉,问题过于本地化。这是一个算法问题,而不是真正的应用脚本问题。
  • @Zig Mandel 我同意这个问题的新人,我可以使用你的帮助
  • 这个问题让我想起了this one

标签: google-apps-script google-sheets


【解决方案1】:

copyId 变量应该在 for 循环中声明;声明copyId时变量name未定义。

另外,您正在使用一些已弃用的 API(例如 DocsList)。

【讨论】:

  • 以下是我收到的电子邮件附件示例
  • 亲爱的 John Mark1 Mark2 Mark3 34 21 34 Remark Fair
  • 当邮件称呼是亲爱的山姆时。
  • 你确定你在name变量之后声明了copyId吗?
  • 请让我知道我该怎么做...我还是新来的,copyId根据您的评论我该怎么做
猜你喜欢
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
相关资源
最近更新 更多