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

使用PHP imap_mail_compose生成邮件后iOS Mail无法查看附件问题

问题描述

我用PHP生成带PDF附件的HTML邮件,通过AWS SES发送,用imap_mail_compose生成MIME代码,但Outlook和iOS Mail无法同时正常显示。测试两种MIME类型的结果:

  • MULTIPART/alternative:HTML内容在两个客户端都显示正常,但附件仅Outlook可见,iOS Mail显示图标却打不开。
  • MULTIPART/mixed:Outlook只显示纯文本正文,还多出两个附件(ATT00001.htm、ATT00002);iOS Mail则依次显示纯文本、HTML内容和附件。

需要修改下方MIME代码的哪些部分,让两类客户端都正常显示?(Base64字符串已替换为示例文本)

Date: Thu, 09 Nov 2023 08:57:36 +0000
From: Billing <billing@email.com>
Subject: New Invoice [Ref No. 123]
To: email@email.com
MIME-Version: 1.0
Content-Type: MULTIPART/mixed; BOUNDARY="531389465-1681692777-1699520256=:303753"

--531389465-1681692777-1699520256=:303753
Content-Type: TEXT/plain; CHARSET=utf-8
Content-Transfer-Encoding: BASE64

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI


--531389465-1681692777-1699520256=:303753
Content-Type: TEXT/html; CHARSET=utf-8
Content-Transfer-Encoding: BASE64

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI

--531389465-1681692777-1699520256=:303753
Content-Type: APPLICATION/pdf; name=Invoice.pdf
Content-Transfer-Encoding: BASE64
Content-Description: Invoice.pdf
Content-Disposition: attachment; size=217203; filename=Invoice.pdf

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI

--531389465-1681692777-1699520256=:303753--
修复方案

核心是采用嵌套MIME结构:外层用multipart/mixed(包含正文和附件),正文部分用multipart/alternative包裹纯文本和HTML内容,这样能兼容两类客户端。具体修改点如下:

1. 重构MIME层级结构

外层保持multipart/mixed,但把原有的纯文本、HTML部分放到一个新的multipart/alternative子块中,附件作为同级单独块,避免客户端把正文识别为附件。

2. 修正附件的Content-Disposition

  • 移除非标准的size参数,iOS Mail对该参数解析易出现异常;
  • 给filename添加双引号,确保不同客户端都能正确识别文件名。

3. 使用独立边界符

嵌套结构需要用不同的边界符区分外层和内层,防止内容混淆导致解析错误。

修改后的完整MIME代码示例
Date: Thu, 09 Nov 2023 08:57:36 +0000
From: Billing <billing@email.com>
Subject: New Invoice [Ref No. 123]
To: email@email.com
MIME-Version: 1.0
Content-Type: multipart/mixed; BOUNDARY="outer-boundary-123456"

--outer-boundary-123456
Content-Type: multipart/alternative; BOUNDARY="inner-boundary-789012"

--inner-boundary-789012
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI

--inner-boundary-789012
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI

--inner-boundary-789012--

--outer-boundary-123456
Content-Type: application/pdf; name="Invoice.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Invoice.pdf"

CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI
CkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNjaW5nI

--outer-boundary-123456--

修复原理

  • 嵌套结构让客户端明确内容层级:multipart/mixed说明邮件包含不同类型的内容(正文+附件),内部的multipart/alternative让客户端自主选择显示纯文本或HTML版本,不会把正文识别为附件。
  • 移除size参数避免iOS解析异常,双引号包裹文件名确保跨客户端兼容性。
  • 独立边界符防止不同层级内容混淆,解决Outlook把HTML正文识别为附件的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:19:51