如何使用html邮件的软换行符每行最多75个字符?

时间:2015-03-02 19:47:04

标签: php html-email line-breaks quoted-printable

我在发送引用可打印的编码HTML邮件方面遇到了一些困难。为了满足兼容性原因,我需要将我的HTML切割成行以满足不超过79个字符行的要求 - 我已经找到了这个用例的“软线断点”的概念。

这方面的一个工作例子是:

( mailto:abc@someonesdomain.tld?subject=3DReply%20to%20this%20Post%20%5B428=
2-8596-332127136989972_339826386220047-6307b30ea80af240f0557f2340d9758d%5D&=
body=3D******%20Enter%20your%20reply%20below%20this%20line%20and%20hit%20SE=
ND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply%20****** )

当我将行结束复制到记事本时,它只显示= CR LF。

所以我尝试使用wordwrap($newHtmlBody, 70, '='.PHP_EOL, true);,我的输出有点像上面的工作示例。但是,在gmail中查看已发送的电子邮件时,它不会接受此操作。我做错了什么?

HTML内容上方的相关电子邮件标题/正文为:

MIME-Version: 1.0
From: "Admin" <no-reply@domain.tld>
Content-Type: multipart/alternative; boundary="_av-aRPROueRxMYL7a0Ro00ndA"
Message-Id: <20150302.ABCDEFGHIJKLMNOPQRSTUVWYXZ@domain.tld>
Date: Mon,  2 Mar 2015 15:41:38 +0100 (CET)

--_av-aRPROueRxMYL7a0Ro00ndA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Plain text

--_av-aRPROueRxMYL7a0Ro00ndA
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

3 个答案:

答案 0 :(得分:1)

简短回答:

使用<pre>标记强制换行符在HTML中显示为换行符。

更长的答案:

您提出的建议(使用wordwrap功能)将发送邮件正文拆分为可管理的块,但不会影响它在客户端中的显示方式。在HTML中,包括“换行符”,制表符和多个空格的空白区域将转换为单个空格。这意味着在Web浏览器中查看HTML时,“软线断开”没有任何意义。输出将持续流动,直到收到<br>或其他标记以中断内容。

如果您有一些邮件发送强制执行79个字符限制的限制,那么您所做的就足够了,即使它在客户端中显示超过79个字符。 (通常“79个字符”限制用于电子邮件的纯文本部分,而不是HTML部分 - 因此请检查限制的来源。)

如果您必须以79个字符显示它,那么使用HTML中的<pre>标记会告诉它不要折叠空格,因此您的休息时间应该显示您要求的位置。

答案 1 :(得分:0)

%20 一个软换行符。你不需要做任何特别的事情。如果您输入这样的长行,Gmail会为您排除该行:

echo '<a href="mailto:me@example.com?subject=Reply%20to%20this%20Post& body=Enter%20your%20reply%20below%20this%20line%20and%20hit%20SEND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply!%20Repeat:%20Enter%20your%20reply%20below%20this%20line%20and%20hit%20SEND.%20You%20may%20also%20attach%20an%20image%20to%20your%20reply!">click me</a>';

答案 2 :(得分:-1)

将“Content-Transfer-Encoding”设置为“7bit”而不是“Quoted-Printable”。某些邮件客户端(如Outlook和Thunderbird)似乎在每行插入双间距换行符。原因是MIME中的'content-transfer-encoding'设置为'quoted-printable',它将回车换行(CRLF)换行符添加到电子邮件的源内容中,这些内容是由这些邮件客户端解释的字符。 / p>