Google Apps脚本:从.txt文件中读取文本

时间:2013-09-23 17:39:41

标签: email google-apps-script

在查看提供的tutorial以使用Google Apps脚本从电子表格发送电子邮件之后,我修改了给定的代码,目的是能够通过附件发送这组电子邮件。

它运作良好,即使有几个怪癖来自Google Apps脚本的限制(这些文件必须位于Google云端硬盘中,并且Google云端硬盘中所有适当名称的文件都取自驱动器)。

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1;   // Number of rows to process
  // Fetch the range of cells A2:C3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var attachment = row[2];    // File name provided.
    var subject = "Mass Email";
    var files = DriveApp.getFilesByName(attachment); // Get all files with name.
    var blobs = []; // Array for attachment.
    // Move files into blobs
    while (files.hasNext()) {
      var file = files.next();
      blobs.push(file.getAs(MimeType.PLAIN_TEXT));
    }
    MailApp.sendEmail(emailAddress, subject, message, {
      attachments: blobs, // add attachments
      cc: "extra@email.com" // CC to employer
    });
  }
}

然而,在我第一次使用它之后,我了解到我需要发送文件而不是作为附件,而是作为电子邮件的邮件正文,以及其他一些更改(这是为了工作)。也就是说,我一次只会向每封电子邮件发送一个“附件”,而不是该附件,应将其内容复制到电子邮件的消息中。附件目前是文本文件,我希望它们保持这种状态,但这不是最重要的事情。

我无法确定使用Google Apps脚本执行此操作的方法。这是可能的,还是我必须以不同的方式通过电子邮件发送这些文件? (希望不是手工。)

提前致谢。

2 个答案:

答案 0 :(得分:2)

正如我在上一篇评论中所提到的,将.txt文件转换为Google文档可以轻松实现。 见下文(建议)

function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 1;   // Number of rows to process
  // Fetch the range of cells A2:C3
  var dataRange = sheet.getRange(startRow, 1, numRows, 3)
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    Logger.log(row)
    var emailAddress = row[0];  // First column
    var message = row[1];       // Second column
    var attachment = row[2];    // File name provided.
    var subject = "Mass Email";
    var files = DriveApp.getFilesByName(attachment); // Get all files with name.
    while (files.hasNext()) {
      var file = files.next();
      var Id = file.getId();
      var content = DocumentApp.openById(Id).getBody().getText();
      Logger.log(content)
    MailApp.sendEmail(emailAddress, subject, message+'\n'+content)
    }
  }
}

答案 1 :(得分:0)

尝试一下。更快,更简单。

var docContent = file.getBlob().getDataAsString();
Logger.log(docContent);