通过mail()发送的电子邮件中的URL在每个邮件客户端中均无法正常工作/显示不同

时间:2019-01-02 22:53:00

标签: php

我正在通过mail()发送电子邮件,其中包含带有变量的URL,该URL允许收件人仅查看过滤的内容。

$text_body= "anglebracket_a_href='https://example.com/list.php?var=$variable'">Link anglebracket/a>"

变量存储在mysql数据库中。到目前为止,一切正常,但是URL在每个邮件客户端中的显示方式都不同。

不是正确的版本:

<br>
https://www.example.com/list.php?var=76733d141

在雷鸟中它读取

<br>
tps://www.example.com/list.php?varv733d141*

(https被截断了,并且=符号,前2位变成v)

在Webmail中,它显示为

<br>
https://www.example.com/list.php?varv733d141

在我的iPhone邮件应用程序中,它可以正确显示,并且该链接是可单击的并且有效!

这些是我的标题:

$recipient = "test@example.com";
$subject="Your Login Data for $var1 at $var2 in $var3";
$text   ="";
$text   .=$text_body;
$sender   = "Test <noreply@example.com>";
$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-Type: text/HTML; charset=ISO-8859-1";
$headers[] = "Content-Transfer-Encoding: quoted-printable";
$headers[] = "From: {$sender}";
$headers[] = "Reply-To: {$sender}";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/".phpversion();
mail($recipient, $subject, $text,implode("\r\n",$headers));

尝试了不同的编码和定界以及所有其他内容。我忽略了哪个基本问题或不是基本问题?感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

由于您说的是发送quoted-printable,因此实际上应该对其进行正确编码。 =字符在带引号的可打印编码中具有特殊含义。使用quoted_printable_encode()函数对正文进行编码。

mail($recipient, $subject, quoted_printable_encode($text),implode("\r\n",$headers));