生成的电子邮件内容中的链接在某些客户端中损坏

问题描述 投票:0回答:1

我正在通过 PHP 脚本生成要发送的 HTML 电子邮件。在电子邮件中,有一个链接,并且 href 是动态设置的。如果我将电子邮件内容转储到文本文件中,我会得到正确的 URL,但是,当我在 Apple Mail 中收到电子邮件时,链接已损坏。我还在 GMail 的网络界面中测试了一封电子邮件,链接也已损坏。

Intended link: 
  http://test.domain/wp-admin/admin.php?page=test-plugin&action=edit&entry_id=48
What the client outputs: 
  http://test.domain/wp-admin/admin.php?page=test-plugin&action%EF%BF%BDit&entry_id1

最奇怪的是在Apple Mail中,如果我查看消息的原始源,链接显示为

 http://test.domain/wp-admin/admin.php?page=test-plugin&action=edit&entry_id=48

Gmail 上一团糟......

 http://wordpress.local/wp-admin/admi=
 n.php?page=3Dtest-plugin&action%EF%BF%BDit&entry_idH"

那么是什么导致客户端破坏这个 URL 呢?

对我来说,这看起来像是一个base_64编码问题(“=ed”和“=48”以某种方式转换),但html内容不是base_64编码的。

内容类型似乎都设置正确。

在电子邮件标题中:

 Content-Type: multipart/related; boundary="inline717a95a1da99481c8ff625418eeedf70"; charset=UTF-8;

在电子邮件内容边界中:

 Content-Type: text/html; charset=UTF-8
 Content-Transfer-Encoding: Quoted-Printable

在 HTML 电子邮件中:

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

链接是通过PHP语句生成的。作为故障排除的一部分,我通过“mb_convert_encoding”运行它>

 mb_convert_encoding(get_site_url().'/wp-admin/admin.php?page=test-plugin&action=edit&entry_id='.$entry->id, "UTF-8");

您知道我应该在哪里解决此问题吗?

php html-email
1个回答
0
投票

您的链接因电子邮件的编码方式和以引用可打印格式包装的方式而被破坏。当该行超过大约 76 个字符时,电子邮件客户端或邮件服务器可能会插入换行符或转换某些字符,从而导致“=EF=BF=BD”等类似问题。

如果不需要,请尝试删除

mb_convert_encoding
或将您的电子邮件切换为
base64
编码。另外,请确保整个
<a href="...">...</a>
出现在 HTML 中的一行上,URL 周围没有多余的空格或换行符。例如:

Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64

然后

base64-encode
您的 HTML 输出或确保您不超过引用打印格式的 76 个字符限制。这应该保持您的链接完好无损

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.