← 返回博客
附件发票文件开发者
邮件附件发送:格式、大小限制与安全注意事项
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',
},
],
});
大小限制
主流邮件服务商对附件大小都有限制:
| 服务商 | 单封邮件附件总大小 |
|---|---|
| Gmail | 25 MB(发送),50 MB(接收) |
| Outlook | 20 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