doushi7394 2016-11-07 20:11
浏览 33
已采纳

在托管服务器上使用PHP发送邮件时,在长URL中添加了空格

I am sending a mail in PHP. This mail contains a long URL. If I send this mail from my website running in localhost I receive it with a valid URL. But if I send the same mail from my website running in hosting server I receive it with a corrupted URL: a space (%20) is added in the middle of the URL.

Here is a sample code I am executing either in localhost or in hosting server:

$body = "<table style='width:100%; border-collapse:collapse'><thead><tr style='background:blue; color:white;'><td style='padding:0.5em; font-size:2em;'>Test</td><td style='padding:1em; text-align:right'>Test</td></tr></thead><tbody><tr><td colspan='2'> this is a test this is a test this is a test </td></tr><tr><td><br/></td></tr><tr><td colspan='2'><p>Click <a href='http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11=url_parameter_test_11&url_parameter_test_12=url_parameter_test_12&url_parameter_test_13=url_parameter_test_13&url_parameter_test_14=url_parameter_test_14&url_parameter_test_15=url_parameter_test_15&url_parameter_test_16=url_parameter_test_16&url_parameter_test_17=url_parameter_test_17&url_parameter_test_18=url_parameter_test_18&url_parameter_test_19=url_parameter_test_19&url_parameter_test_20=url_parameter_test_20&url_parameter_test_21=url_parameter_test_21'>here</a></p></td></tr></tbody></table>";
$boundary = uniqid('mf');
$header = "MIME-Version: 1.0
";
$header .= "From: Test <test@mail.com>
";
$header .= "Content-Type: multipart/alternative;boundary=".$boundary."
";
$message = "

--".$boundary."
";
$message .= "Content-type: text/html;charset=UTF-8

";
$message .= $body;
$message .= "

--".$boundary."--";
mail("my_mail@mail.com", "test", $message, $header);

And here is the URL I receive in my mail when executed from hosting server (contains a %20 in parameter 15): http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11=url_parameter_test_11&url_parameter_test_12=url_parameter_test_12&url_parameter_test_13=url_parameter_test_13&url_parameter_test_14=url_parameter_test_14&url%20_parameter_test_15=url_parameter_test_15&url_parameter_test_16=url_parameter_test_16&url_parameter_test_17=url_parameter_test_17&url_parameter_test_18=url_parameter_test_18&url_parameter_test_19=url_parameter_test_19&url_parameter_test_20=url_parameter_test_20&url_parameter_test_21=url_parameter_test_21

Do you have any idea why the URL could be corrupted and what I could do to fix it ?

Thanks !

  • 写回答

1条回答 默认 最新

  • doubu0897 2016-11-08 18:40
    关注

    I finally find the solution in another stackoverflow post : [Problems with spaces in php mails

    $body = "<table style='width:100%; border-collapse:collapse'><thead><tr style='background:blue; color:white;'><td style='padding:0.5em; font-size:2em;'>Test</td><td style='padding:1em; text-align:right'>Test</td></tr></thead><tbody><tr><td><br/></td></tr><tr><td colspan='2'> this is a test this is a test this is a test </td></tr><tr><td><br/></td></tr><tr><td colspan='2'><p style='font-size:110%;'>Click <a href='http://www.test.com/test.php?url_parameter_test_1=url_parameter_test_1&url_parameter_test_2=url_parameter_test_2&url_parameter_test_3=url_parameter_test_3&url_parameter_test_4=url_parameter_test_4&url_parameter_test_5=url_parameter_test_5&url_parameter_test_6=url_parameter_test_6&url_parameter_test_7=url_parameter_test_7&url_parameter_test_8=url_parameter_test_8&url_parameter_test_9=url_parameter_test_9&url_parameter_test_10=url_parameter_test_10&url_parameter_test_11=url_parameter_test_11&url_parameter_test_12=url_parameter_test_12&url_parameter_test_13=url_parameter_test_13&url_parameter_test_14=url_parameter_test_14&url_parameter_test_15=url_parameter_test_15&url_parameter_test_16=url_parameter_test_16&url_parameter_test_17=url_parameter_test_17&url_parameter_test_18=url_parameter_test_18&url_parameter_test_19=url_parameter_test_19'>here</a></p></td></tr><tr><td><br/></td></tr></tbody></table>";
    $boundary = uniqid('mf');
    $header = "MIME-Version: 1.0
    ";
    $header .= "From: Test <test@mail.com>
    ";
    $header .= "Content-Type: multipart/alternative;boundary=".$boundary."
    ";
    $message = "
    
    --".$boundary."
    ";
    $message .= "Content-type: text/html;charset=UTF-8
    ";
    $message .= "Content-Transfer-Encoding: base64
    
    ";
    $message .= chunk_split(base64_encode($body));
    mail("my_mail@mail.com", "test", $message, $header);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决