← 返回博客
附件发票文件开发者

邮件附件发送:格式、大小限制与安全注意事项

Rovela 附件 API、大小限制、大文件改用链接的方案、安全注意事项和 Content-Type 设置。

更新于 2026年10月12日
邮件附件发送:格式、大小限制与安全注意事项

邮件附件发送:格式、大小限制与安全注意事项

发票、报告、合同——很多业务场景需要在邮件里附上文件。但附件有不少坑。

Rovela API 发送附件

const fs = require('fs');

await rovela.emails.send({
  from: 'billing@yourdomain.com',
  to: user.email,
  subject: '你的发票',
  html: '<p>请查收附件中的发票。</p>',
  attachments: [
    {
      filename: 'invoice-2024-001.pdf',
      content: fs.readFileSync('/path/to/invoice.pdf').toString('base64'),
      content_type: 'application/pdf',
    },
  ],
});

大小限制

主流邮件服务商对附件大小都有限制:

服务商单封邮件附件总大小
Gmail25 MB(发送),50 MB(接收)
Outlook20 MB
QQ 邮箱50 MB

实践建议:附件总大小超过 5 MB 就应该考虑改用链接——把文件上传到对象存储(S3、OSS),邮件里放下载链接。

大文件用链接替代

// 生成有时效的下载链接
const { getSignedUrl } = require('@aws-sdk/s3-request-presigner');
const url = await getSignedUrl(s3Client, new GetObjectCommand({
  Bucket: 'your-bucket',
  Key: `invoices/${invoiceId}.pdf`,
}), { expiresIn: 7 * 24 * 3600 }); // 7 天有效

await rovela.emails.send({
  // ...
  html: `<p>点击下载发票(7 天内有效):<a href="${url}">下载发票</a></p>`,
});

安全注意事项

  • 不要附加用户上传的文件:用户上传的内容可能包含恶意代码,直接附在邮件里会传播给其他用户
  • 可执行文件格式被过滤:.exe、.bat、.js 等格式会被邮件服务商过滤
  • PDF 也可能携带恶意代码:来自外部的 PDF 附件发送前应先扫描
  • 文件名要有意义:invoice-2024-001.pdf 比 doc.pdf 好得多,用户更愿意打开

Content-Type 要准确

错误的 Content-Type 会导致附件被当成普通文本处理。常见类型:

  • PDF: application/pdf
  • Excel: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • CSV: text/csv
  • ZIP: application/zip