使用 PHP imap_mail_compose 生成时,无法在 iOS Mail 上查看电子邮件附件

Unable to view e-mail attachments on iOS Mail when generated with PHP imap_mail_compose

提问人:djh123 提问时间:11/9/2023 最后编辑:djh123 更新时间:11/9/2023 访问量:21

问:

我正在尝试使用 PHP 生成带有 1 个 PDF 附件的 HTML 电子邮件。我用来发送电子邮件的工具是 AWS SES,这意味着它必须采用 MIME 格式。

我偶然发现了 imap_mail_compose 函数,并编写了一个脚本来生成 MIME 代码,然后再将其提交给 AWS SES 进行发送,但我似乎无法让它在 Outlook 和 iOS Mail 上正确显示。

我尝试了 MULTIPART/mixed 和 MULTIPART/alternative,它们提供了不同的结果。

MULTIPART/alternative = HTML 在 Outlook 和 iOS 邮件上显示正常,但附件仅在 Outlook 上可见。在 iOS 邮件上,会显示回形针附件图标,但没有要打开的附件。

MULTIPART/mixed = 在 Outlook 上,我收到一封电子邮件,正文中只有基本文本,带有 3 个附件(ATT00001.htm、ATT00002 和 Invoice.pdf) - 邮件的每个部分(基本、HTML 和附件)一个。在 iOS Mail 上,所有 3 个部分都按顺序显示(基本、HTML 和附件)。

我可以在下面的 MIME 代码中进行任何更改以使其在两种客户端类型上正确显示吗?

提前非常感谢。

(为简洁起见,base64 字符串已替换为一些示例文本)

Date: Thu, 09 Nov 2023 08:57:36 +0000
From: Billing <[email protected]>
Subject: New Invoice [Ref No. 123]
To: [email protected]
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--

php 电子邮件 mime mime-message php-imap

评论

1赞 Justinas 11/9/2023
你为什么不使用例如 PHPMailer?AWS SES 只是提供程序,但您仍然可以将它与普通库一起使用,以解决您所有令人头疼的问题:stackoverflow.com/questions/23497876/...
0赞 djh123 11/9/2023
多亏了@Justinas,我们的生产服务器被锁定,这意味着像 587 这样的电子邮件端口被关闭和关闭。如果 PHPMailer 使用 SES,我们可能会打开端口,但我刚刚在打开端口的开发服务器上对其进行了测试,它显示“SMTP 错误:密码命令失败:535 身份验证凭据无效” - 我正在使用 SES SMTP ID 和密钥(不是 AWS IAM 凭证)。该密钥包含特殊字符,因此已尝试将其编码为其他建议的 URL,但仍然收到相同的错误。SES域名已验证,我们离发送限制还差得很远。
0赞 djh123 11/9/2023
看起来是 SMTP 密码中的反斜杠导致身份验证失败。我尝试过 URL 编码,但仍然不起作用。经过多次尝试,我注意到生成的其中一个 SMTP 密码不包含反斜杠并且第一次有效。

答: 暂无答案