13

target="_blank"我最近了解到像 Gmail 这样的网络邮件客户端会对 HTML 电子邮件进行更改,例如添加<a>标签。

我还发现其他变化也会发生。当我从我的 PHP 脚本向 Gmail(可能还有其他 Web 邮件客户端)发送 HTML 电子邮件时,任何链接的 URL 中包含的变量值都被删除了。因此,例如,这是我在 PHP 代码中设置的值:

$mailContent = '<p><a target="_blank" href="https://example.com/confirmation.html?verification=x1x1x1x1x1x1x1x&email=yyyy@email.com">click here to go to the web site and activate your account!</a></p>';

但是当在 Gmail 中收到电子邮件时,HTML 代码如下所示:

<p><a target="_blank" href="https://example.com/confirmation.html?verification=&email=">click here to go to the web site and activate your account!</a></p>

x1x1x1x1x1x1x1xyyyy@email.com已从<a>标签中删除。

如何保护要传递给 URL 的变量的值,以便 Gmail 不会删除它们?

4

4 回答 4

3

在 Gmail 中的邮件上单击查看原始/来源,以查看 URL 是否看起来应该如此。如果是这样,您知道问题在于 Gmail 如何格式化邮件以供您查看。如果即使在源代码中也被肢解了,我想知道您的网页/php/CMS 中是否有任何更改代码的内容(您是否使用过)。

您应该按照@Crisp 所说的那样尝试 URL 编码。这是W3 参考

于 2013-03-27T19:00:44.763 回答
2

在 html 中发送电子邮件使用Quoted-printable编码。您的 $mailContent 的问题是“=”必须由 =3D 表示

尝试添加: $mailContent =quoted_printable_encode($mailContent);

于 2017-06-28T00:24:19.283 回答
1

这可能不是完美的答案,但如果您的应用程序允许,我已经多次使用 URL 缩短器。

http://goo.gl/是我的首选,因为 API 非常易于实现,而且 google 速度非常快。我在一个类中有一个函数,我只是通过它运行我的 url 并将返回发送到我需要的任何地方。

于 2013-03-27T18:43:51.370 回答
0

这里的另一个不完美的答案但是,我的问题是我在 html 正文中包含了一个 http url,显然是无效的,所以我将它们更改为 https。这是在开发环境中,因此在生产中没有问题。

以下是有关此的更多信息:

邮件正文中导致不安全站点的任何 URL 也可能需要删除。使用 https://transparencyreport.google.com/safe-browsing/search验证这些链接。所有链接都应正确地以“https”为前缀。 https://en.wikipedia.org/wiki/HTTPS 谷歌似乎拒绝“http”。有时,但并非总是如此,从任何签名中删除链接会有所帮助。

于 2020-11-08T02:12:40.743 回答