PHP邮件功能随机为消息文本添加空格

And*_*ndy 14 php email space hotmail

我有一个非常简单的PHP脚本,如:

while ($condition){
    echo "<a href="thanks.php?id=".$id."> THANKS </a>";
}
Run Code Online (Sandbox Code Playgroud)

当然,我有更多的代码,但没关系.一旦我创建了这段代码,脚本就会向用户发送一封电子邮件.

INBOX

链接在每一行都没问题,除了最后一个以这种方式显示链接:

    tha nks.php?id.....
Run Code Online (Sandbox Code Playgroud)

它在代码之间添加了一个空格.

这只发生在hotmail上.Gmail,雅虎和其他一切工作都很好.

kar*_*can 15

我知道这已经晚了但是有一个替代解决方案对我有用:

使用此行使用base64对整个邮件进行编码:

$message = chunk_split(base64_encode($message));
Run Code Online (Sandbox Code Playgroud)

然后,将此标题附加到此标题:

$headers .= "Content-Transfer-Encoding: base64\r\n\r\n";
Run Code Online (Sandbox Code Playgroud)

这将告诉邮件客户端您的邮件是base64编码的.

  • 谢谢@karancan,您的回答很棒:) html 电子邮件链接中的随机空格有问题 - 它们不见了。很好!! (2认同)

Mor*_*red 13

karancan的解决方案可能有效,但根本原因是Hobo所说的.该mail函数每900个字符插入一次换行符(我认为).因此,如果您正在构建带有大量消息的$ message,$message .= "more text";那么一旦该行长度超过900个字符,您将遇到此错误.这很麻烦,因为空间似乎是间歇性的,特别是如果你正在构建一个HTML消息,因为有时候换行会出现在完美的良性位置.

简单的解决方案是在行\r\n\尾添加一个.

有趣的是,这些形式有效:

$message .= "<tr><td>1</td><td>2</td>\r\n";
$message .= '<tr><td>1</td><td>2</td>'."\r\n";
Run Code Online (Sandbox Code Playgroud)

但这不是:

$message .= '<tr><td>1</td><td>2</td>\r\n';
Run Code Online (Sandbox Code Playgroud)

\r\n必须用双引号括起来,否则字符将只是被添加到文本,而不是创建一个回车/换行符.


小智 11

面临同样的问题,并尝试了大多数这些解决方案,但它不适合我.似乎当线路看起来太长而无法邮寄功能时,它会增加大约900个字符标记的空间.所以添加wordwrap的以下解决方案对我有用.

mail($ to,$ subject,wordwrap($ message),$ headers);


Hob*_*obo 2

我见过 sendmail 在行太长时插入字符。这里的情况并非如此(因为其他客户端处理得很好),但我想知道 hotmail 是否有您遇到的行长度限制。

echo如果您在, ie中插入换行符,有什么区别吗?

while ($condition){

    echo "<a href=\"thanks.php?id=".$id."\"> THANKS </a>\n";

}
Run Code Online (Sandbox Code Playgroud)