You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apps Script中使用sendMail函数附加Google Drive中的pdfName文件?

解决Google Apps Script中sendMail无法附加Drive文件的问题

嘿,我来帮你搞定这个附件的问题!既然你说其他功能都正常,那大概率是在获取Drive文件或者传递附件的环节出了小差错,咱们一步步排查:

最常见的问题:直接用文件名而非文件对象/Blob

Google Apps Script的MailApp.sendEmail()或GmailApp.sendEmail()并不接受直接传文件名作为附件,你需要先从Drive中获取到文件的Blob对象或者直接传入文件对象。

举个修正后的示例代码:

function sendMailWithAttachment() {
  const pdfName = "你的PDF文件名.pdf"; // 替换成你的目标文件名
  const recipient = "收件人邮箱@example.com";
  const subject = "带PDF附件的邮件";
  const body = "这是你需要的PDF文件";

  // 1. 根据文件名查找Drive中的文件
  const fileIterator = DriveApp.getFilesByName(pdfName);
  
  if (fileIterator.hasNext()) {
    // 2. 获取文件并转成Blob(邮件附件需要Blob格式)
    const pdfFile = fileIterator.next();
    const pdfBlob = pdfFile.getBlob().setName(pdfName); // 确保附件显示正确的文件名
    
    // 3. 发送邮件并附加Blob
    MailApp.sendEmail({
      to: recipient,
      subject: subject,
      body: body,
      attachments: [pdfBlob] // 附件参数是数组,每个元素是Blob或文件对象
    });
  } else {
    // 如果找不到文件,抛出错误提示
    console.error(`无法在Drive中找到名为 "${pdfName}" 的文件,请检查文件名或路径!`);
  }
}

其他可能的原因及解决方法

  • 重名文件问题:如果Drive中有多个同名的PDF,getFilesByName()只会返回第一个匹配的文件。这种情况下,最好直接用文件ID来获取,更可靠:
    const pdfFile = DriveApp.getFileById("你的PDF文件ID");
    const pdfBlob = pdfFile.getBlob();
    
  • 权限不足:确保运行脚本的用户拥有该Drive文件的查看/编辑权限。如果文件在共享驱动器中,需要先定位到共享驱动器的文件夹再获取文件:
    const sharedFolder = DriveApp.getFolderById("共享驱动器文件夹ID");
    const fileIterator = sharedFolder.getFilesByName(pdfName);
    
  • 附件参数格式错误:确认attachments是一个数组,哪怕只有一个附件也要用[]包裹。比如不要写成attachments: pdfBlob,必须是attachments: [pdfBlob]。
  • 文件名拼写错误:仔细检查pdfName的拼写,包括大小写、空格、特殊字符,虽然Drive不严格区分大小写,但完全匹配能避免不必要的问题。

内容的提问来源于stack exchange,提问作者Eric K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:39:23