我使用 PHP 邮件功能发送 HTML 电子邮件,发现电子邮件客户端定期插入单个空格字符。当电子邮件的一部分是网址时,这会很不方便。
我设计了一个测试脚本来说明这一点:
<?php
$message = '<html><body>';
$message .=
$message .= '</body></html>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';
$message .= '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456<br>';A
$headers = 'From: [email protected]' . "\r\n" . 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/html; charset=utf-8' . "\r\n";
$subject = 'Inserting spaces into HTML';
mail('[email protected]', $subject, $message, $headers);
?>
在 Outlook 和 Apple Mail(但不是 MailHog)中,结果如下:
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456 1234567890123456789012345678901234567890123456 78901234567890123456789012345678901234567890123456
注意上面出现空格的位置。
我尝试了更多行,发现如果计算标签中的字符和空格本身,每 998 个字符就会出现这种情况(我认为)。
简单的解决方法是用格式填充前面的 HTML,以便 url 中不会出现空格。
有谁能解释一下吗?
RFC 5321 定义电子邮件中的行最多不得超过 1000 个字节(包括最后的 CRLF ( 和 ):
包含 的文本行的最大总长度为 1000 个八位字节
由于 HTML 中的换行符只是空白,所以我只是将行数保持在最大值以下。
如果您确实需要更长的行,您可以使用可引用打印编码并在行末尾添加
=
作为软换行符(根据 RFC 1341 第 5.1 节中的规则 5)。请注意,带引号的可打印文件每行仅允许 76 个字节。
规则 #5(软换行):引用的可打印内容 编码要求编码行不超过 76 长字符。如果要对较长的行进行编码 Quoted-Printable 编码,“软”换行符必须 使用。等号作为最后一个字符 编码行表示这样一个不重要的(“软”) 编码文本中的换行符。
所以这个
one=
line
将呈现为
one line