我最近了解到像Gmail这样的网络邮件客户端会对HTML电子邮件进行更改,例如将target="_blank"
添加到<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>
值x1x1x1x1x1x1x1x
和yyyy@email.com
已从<a>
标记中删除。
如何保护我要传递给网址的变量值,以便Gmail不会将其删除?
答案 0 :(得分:3)
点击Gmail中邮件的查看原始/来源,查看这些网址是否应该如此。如果是这样,您就知道问题是Gmail如何格式化邮件以供您查看。如果它甚至在源代码中被删除了,我想知道你的网页/ php / CMS中是否有任何内容(你是否使用过它)会改变代码。
@Crisp说,你应该试试URL-encoding。这是W3 reference。
答案 1 :(得分:1)
这可能不是一个完美的答案,但如果您的应用程序允许,我已多次使用URL缩短器。
http://goo.gl/是我的首选,因为API非常容易实现,而Google非常快。我在一个类中有一个函数,我只需通过它运行我的url并在任何需要它的地方发送返回。
答案 2 :(得分:1)
通过电子邮件发送html使用Quoted-printable编码。 $ mailContent的问题是“=”必须用= 3D
表示尝试添加此内容: $ mailContent = quoted_printable_encode($ mailContent);
答案 3 :(得分:0)
另一个不完美的答案,但是,我的问题是我在html正文中包含一个http url,显然无效,因此我将其更改为https。这是在开发环境中,因此在生产上没有问题。
Here是有关此的更多信息:
邮件正文中导致不安全站点的任何URL也可能需要删除。使用https://transparencyreport.google.com/safe-browsing/search来验证这些链接。.所有链接均应正确加上“ https”前缀。 https://en.wikipedia.org/wiki/HTTPS Google似乎拒绝了“ http”。有时但并非总是如此,从任何签名中删除链接都会有所帮助。