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

通过Outlook发送至AWS SES的.eml附件丢失文件名问题

Outlook发送.eml附件无文件名问题及解决方案(AWS SES场景)

我在使用AWS SES处理收件邮件时发现,当通过Outlook发送带.eml格式附件的邮件,SES收到的邮件中该附件的头信息不包含filename或name字段,导致邮件解析器(如mailparser)无法提取附件名称。以下是不同场景下的附件头对比:

附件头示例

Outlook发送.eml文件时

--_000_BE1P281MB205095D41C70010F872DF362CFFE2BE1P281MB2050DEUP_--  

--_004_BE1P281MB205095D41C70010F872DF362CFFE2BE1P281MB2050DEUP_  
Content-Type: message/rfc822  
Content-Disposition: attachment;  
    creation-date="Fri, 14 Feb 2025 07:20:46 GMT";  
    modification-date="Fri, 14 Feb 2025 07:20:50 GMT"

不存在filename或name字段

Outlook发送.png文件时

--_004_BE1P281MB2050D6CDD8B6C173D8B5E7A4CFFE2BE1P281MB2050DEUP_  
Content-Type: image/png; name="image-20250128-164450.png"  
Content-Description: image-20250128-164450.png  
Content-Disposition: attachment; filename="image-20250128-164450.png";  
    size=42918; creation-date="Fri, 14 Feb 2025 07:22:48 GMT";  
    modification-date="Fri, 14 Feb 2025 07:22:51 GMT"  
Content-Transfer-Encoding: base64

存在文件名

Gmail发送.eml文件时

--000000000000cff142062e151503  
Content-Type: message/rfc822; name="Example.eml"  
Content-Disposition: attachment; filename="Example.eml"  
Content-ID: <f_m74g2gme0>  
X-Attachment-Id: f_m74g2gme0

存在文件名

问题解答

1. Outlook不包含.eml附件文件名是bug还是预期行为?

这是Outlook的预期行为,并非bug。原因在于Outlook将.eml文件识别为「内嵌邮件」(符合message/rfc822 MIME类型),而非普通的二进制附件。在Outlook的设计逻辑中,这类内嵌邮件的文件名可以由收件端从邮件主题、发件信息等元数据生成,因此默认不在MIME头中携带filename或name字段。

2. 如何让Outlook发送.eml附件时附带文件名?

可以通过以下几种方法解决:

  • 压缩后发送:将.eml文件打包成.zip格式,Outlook会正常为压缩包添加文件名字段
  • 使用「作为附件插入」选项:在Outlook中点击「插入>附加文件」,选中.eml文件后,点击「插入」按钮旁的下拉箭头,选择「作为附件插入」(部分版本可能命名为「附加为文件」),而非直接拖放.eml到邮件编辑区
  • 修改注册表(Windows桌面版):添加注册表项强制Outlook将.eml作为普通附件处理:
    1. 打开注册表编辑器(regedit)
    2. 导航到HKEY_CURRENT_USER\Software\Microsoft\Office\<你的Outlook版本>\Outlook\Preferences
    3. 新建DWORD值DisableInlineAttachments,设置值为1
    4. 重启Outlook生效(操作前建议备份注册表)
  • 使用Outlook网页版发送:Outlook Web App(OWA)对.eml附件的处理逻辑不同,通常会自动携带文件名

3. 推荐的TypeScript邮件解析库

如果mailparser无法处理无文件名的.eml附件,推荐以下几个库:

  • emailjs-mime-parser:轻量级MIME解析库,支持TypeScript,可手动遍历MIME部件,当检测到message/rfc822类型且无文件名时,可自行解析内嵌邮件的Subject字段作为文件名,或设置默认名称(如attachment.eml)
  • mime-message-parser:TypeScript原生支持,提供灵活的解析钩子,允许自定义处理缺失字段的场景,适合需要精细化控制解析逻辑的场景
  • 自定义扩展mailparser:也可以基于现有mailparser库扩展逻辑,在解析message/rfc822类型附件时,自动读取内嵌邮件的主题作为文件名,示例代码片段:
    import { simpleParser } from 'mailparser';
    
    const parsed = await simpleParser(emailBuffer);
    parsed.attachments.forEach(async (att) => {
      if (att.contentType === 'message/rfc822' && !att.filename) {
        // 解析内嵌邮件的主题作为文件名
        const innerParsed = await simpleParser(att.content);
        att.filename = `${innerParsed.subject || 'unknown'}.eml`;
      }
    });
    

内容的提问来源于stack exchange,提问作者Naum Zakletskyi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:27:04