电子邮件客户端在 HTML 电子邮件中添加单个空格字符

问题描述 投票:0回答:1

我使用 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 中不会出现空格。

有谁能解释一下吗?

outlook character html-email whitespace apple-mail
1个回答
0
投票

RFC 5321 定义电子邮件中的行最多不得超过 1000 个字节(包括最后的 CRLF ( 和 ):

包含 的文本行的最大总长度为 1000 个八位字节

由于 HTML 中的换行符只是空白,所以我只是将行数保持在最大值以下。

如果您确实需要更长的行,您可以使用可引用打印编码并在行末尾添加

=
作为软换行符(根据 RFC 1341 第 5.1 节中的规则 5)。请注意,带引号的可打印文件每行仅允许 76 个字节。

规则 #5(软换行):引用的可打印内容 编码要求编码行不超过 76 长字符。如果要对较长的行进行编码 Quoted-Printable 编码,“软”换行符必须 使用。等号作为最后一个字符 编码行表示这样一个不重要的(“软”) 编码文本中的换行符。

所以这个

one=
line

将呈现为

one line
© www.soinside.com 2019 - 2024. All rights reserved.