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 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失