
apple mail 对 multipart 邮件结构敏感,单边界 `multipart/alternative` 无法正确解析内联图片;需采用嵌套结构:外层 `multipart/alternative` 包含纯文本与 html 版本,html 部分再通过 `multipart/related` 关联 cid 引用的图片,才能确保所有客户端(尤其是 ios)完整渲染。
在构建含内联图像的电子邮件时,仅使用单一 multipart/alternative 边界是不够的——尤其当邮件中包含多张通过 cid: 引用的 Base64 图片时。Apple Mail(iOS/macOS)严格遵循 MIME 规范,要求 HTML 内容与其关联资源(如图片)必须封装在 multipart/related 子部分中,且该子部分需作为 multipart/alternative 的一个整体 part 出现。否则,Apple Mail 会忽略或错误解析 Content-ID 引用,导致仅显示最后一张图、空白内容,或全部图片降级为不可预览附件。
✅ 正确结构应为三层嵌套:
- 外层:multipart/alternative — 提供 text/plain(备选文本)和 multipart/related(富媒体主内容)两个并列 part;
- 中层:multipart/related — 类型为 text/html,其 boundary 内包含 HTML 主体 + 所有 inline 图片 part;
- 内层:每个图片 part 使用 Content-Type: image/jpeg、Content-ID:
、Content-Disposition: inline,并在 HTML 中通过 引用。
以下是精简、可复用的 PHP 构建示例(兼容 Apple Mail / Gmail / Outlook / Android):
$boundary1 = 'b1_' . md5(uniqid(rand())); // 外层 alternative boundary $boundary2 = 'b2_' . md5(uniqid(rand())); // 内层 related boundary // ✅ 外层头部(必须声明 multipart/alternative) $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/alternative; boundary=\"$boundary1\"\r\n"; $headers .= "From: no-reply@yourdomain.net\r\n"; // ✅ 构建完整邮件体(注意换行符统一为 \r\n) $message = ""; // Part 1: 纯文本备选(Apple Mail 会回退显示此内容) $message .= "--$boundary1\r\n"; $message .= "Content-Type: text/plain; charset=\"us-ascii\"\r\n"; $message .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $message .= "This email contains a visitor register with photos. Please view in HTML mode.\r\n\r\n"; // Part 2: HTML + 内联图片(作为 multipart/related 整体) $message .= "--$boundary1\r\n"; $message .= "Content-Type: multipart/related; boundary=\"$boundary2\"; type=\"text/html\"\r\n\r\n"; // HTML 主体(不含图片数据,仅含 cid 引用) $message .= "--$boundary2\r\n"; $message .= "Content-Type: text/html; charset=\"UTF-8\"\r\n"; $message .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; $message .= ""; $message .= "Visitor Register " . date('d/m/Y') . "
"; $message .= "
| @@##@@ | Robin |
⚠️ 关键注意事项:
- 绝不混用 multipart/alternative 与直接嵌入图片:图片不能作为 alternative 的独立 part,必须包裹在 related 中;
- Content-ID 必须与 HTML 中 cid: 完全匹配(包括尖括号),且全局唯一;
- Base64 数据需 chunk_split() 分块(每行 ≤76 字符),否则某些 MTA 会截断;
- 避免在 HTML 中使用 data:image/...:虽在浏览器可行,但 Apple Mail 不支持 data URI 渲染;
- 优先测试真实设备:iOS 邮件客户端对 MIME 解析最严格,模拟器或网页版无法替代真机验证。
总结:Apple Mail 的“空白邮件”本质是 MIME 结构不合规导致的解析失败。采用 multipart/alternative + multipart/related 嵌套模型,严格遵循 RFC 2387,即可一劳永逸解决跨平台图片显示问题。










