【问题标题】:PHP generate and send emails with broken linkPHP 生成并发送带有断开链接的电子邮件
【发布时间】:2013-09-21 20:06:01
【问题描述】:

对不起我的英语。

我用php建立一个链接。 我通过电子邮件发送。 有时链接(在电子邮件中)已损坏。

当我点击(或复制到浏览器)时已在随机位置插入了一个空格。

有什么想法吗?

生成邮件,代码如下:

$url="www.example.com/dir/subdir/page.php?param1=$p1&param2=$p2&param3=$p3[...]&param20=$p20";
    [...]
    $body .= "<td><a href=\"$url\">";
    $body .= htmlentities($url,ENT_NOQUOTES,'ISO-8859-1');
    $body .= "</a></td>";
    [...]

$headers  = "From: $companyName < $companyMail > \r\n";
$headers .= "Reply-To: $companyMail \r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 ";
$headers .= "Content-Type: text/html; charset=ISO-8859-1";
$headers .= "MIME-Version: 1.0 ";

mail($client, "Confirmaton", $body, $headers);

page.php 上的示例接收参数

代码:

echo "<pre>Request:<br>";
print_r($_REQUEST);
echo "</pre><br>";
exit;


case OK:
Request:
Array
(
    [p1] => value1
    [p2] => value2
    [p3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)

Error1 (link with space in value)
Request:
Array
(
    [p1] => value1
    [p2] => val ue2
    [p3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)

Error2 (link with space in variable)
Request:
Array
(
    [p1] => value1
    [p2] => value2
    [p_3] => value3
    [p3] => value5
    [p4] => value6
    [p5] => value7
    (...)
    [p20] => value20

)

【问题讨论】:

  • 你能给我们一个网址的例子吗?
  • 我怀疑你需要urlencode() 而不是htmlentities()
  • 可能无法修复,但您需要添加http:// 尝试$url="http://www.example.com...,因为该链接在大多数电子邮件客户端中无法点击。
  • 大多数邮件客户端会在一定数量的字符(例如 80 个字符)之后插入换行符。如果您将换行符复制并粘贴到浏览器栏中,它将变为空格。
  • 我在 url 的开头添加:http://,像这样的 urlencode ?param1=".urlencode($p1)."&param2=".urlencode($p2)." 和 style= \"white-space:nowrap;\" 在包含链接的 处。似乎在一些测试中工作过

标签: php email hyperlink


【解决方案1】:

尝试强制php避免包装链接:

$link = wordwrap($url, 255, "\r\n");

这可能是每个邮件客户端在电子邮件正文中放入换行符造成的。

【讨论】:

    【解决方案2】:

    空格和换行符会破坏您的网址。这不是一个错误。这是您的 smtp 服务器对一行的限制。 因此 RFC 2821 和 5321 定义了最大行长度: 包括 在内的文本行的最大总长度为 1000(有时为 990) 八位字节(不计算为透明度而重复的前导点)。 这个数字可以通过使用 SMTP 服务扩展来增加。

    解决方案可以在每个&lt;td&gt;&lt;tr&gt; 之后换行。

    $body .= "<td><a href=\"$url\">";
    $body .= htmlentities($url,ENT_NOQUOTES,'ISO-8859-1');
    $body .= "</a></td>\n";
    

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2012-08-10
      • 2016-01-08
      • 1970-01-01
      • 2016-07-05
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多