无效的参数:使用MailApp.sendEmail()的fileName错误

时间:2018-10-01 16:18:29

标签: google-apps-script

使用Invalid argument: fileName(...)时出现错误MailApp.sendEmail(msg)

我已阅读此discussion。根据{{​​3}},MailApp.sendEmail({attachments: BlobSource[],...}期望Blob源数组。我在数组和单个Blob源(即没有[]的情况下)都尝试过此操作,但得到了相同的错误。

function sendEmailNotifications(payroll){
  debug && Logger.log('sending email notifications')
  var emailTmpltId = PropertiesService.getScriptProperties().getProperty('EMAIL_TEMPLATE')
  var messageTmplt = DocumentApp.openById(emailTmpltId).getBody().getText() // get the template text
  // Iterate through payroll and send emails.
  payroll.forEach(function(p){
    debug && Logger.log('starting email for '+p['EMPLOYEE_EMAIL'])
    var msg = {
      to: p['EMPLOYEE_EMAIL'],
      subject: p['PAY_DATE']+': Pay stub ['+p['EMPLOYEE_CODE']+']',
      body: emailMerge(messageTmplt, p),
      attachments: [DriveApp.getFileById(p['DOC_ID']).getBlob()], // per docs expects BlobSource[]

    }
    debug && Logger.log('sendEmailNotification: '+JSON.stringify(msg))
    MailApp.sendEmail(msg) // Invalid argument: fileName
  })
}

请注意,调试日志显示msg.attachments = {}接受的数据正确,并且DOC_ID指向有效的PDF文件。

还请注意,下面的测试代码使用调试日志中的p['DOC_ID']返回有效的文件名:

function testDocId() {
  var id = '1xh0HBWaANnFQ_AHbT6jc7pQWPbMQ9WXt'
  Logger.log('testDocId: document name: '+DriveApp.getFileById(id).getName())
}

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

感谢@ |'-'| ..

这让我无路可走...原来我在文件名中有一个'@'字符,对DriveApp.Files来说很好用;但是,不适用于Blob名称。当我删除“ @”时,代码可以正常工作。