处理自动换行的电子邮件(Content-Type:text/plain)

Mat*_* D. 6 php email

我正在尝试将电子邮件处理到我的应用程序中,一切似乎工作正常,直到我收到来自用户的电子邮件,其邮件服务器正在强制执行邮件文本的自动换行.我知道自动换行是RFC规范的一部分,所以我只是寻找最好的方法来处理它以获得一个很好的显示消息.

原始电子邮件:

这是我的主要问题.当我通过电子邮件发送消息时,文本很奇怪.它几乎看起来好像消息本身已被破坏.我不确定为什么会这样,因为我原来的电子邮件看起来不像那样.

以下是收到的电子邮件的外观(标有CRLF以显示邮件服务器插入的位置):

这是我的主要问题.当我通过电子邮件发送消息时,文本被分解为
奇怪的CRLF .它几乎看起来好像消息本身已被破坏.我不确定CRLF
为什么会出现这种情况,因为我的原始电子邮件看起来与CRLF
完全不同.

我的处理代码贯穿以下内容,然后将结果插入数据库.

$dirty_string = nl2br($dirty_string);
$config = HTMLPurifier_Config::createDefault();
$config->set('AutoFormat.RemoveEmpty', 'true');
$config->set('AutoFormat.RemoveEmpty.RemoveNbsp', 'true');
$config->set('HTML.Allowed', 'a[href],br,p');
$purifier = new HTMLPurifier($config);
$clean_string = $purifier->purify($dirty_string);
Run Code Online (Sandbox Code Playgroud)

以下是显示的结果.如果我的页面上的div对于该行不够宽,浏览器将自动自动换行,但是来自nl2br()的换行导致下一行变短.

这是我的主要问题.当我通过电子邮件发送的消息,该文本被
打散而
奇怪.它几乎看起来好像消息本身已被
破坏.我不确定
为什么会这样,因为我原来的电子邮件看起来
不像
那样.

我想也许我可以将双CRLF更改为新段落并删除所有单个CRLF以将这些行连接到单个行,其中自动换行将正确显示.但如果有人在电子邮件中发布以下项目符号列表,则会破坏列表.

这是我的清单CRLF
- 第1项CRLF
- 第2项CRLF
等......

任何帮助将非常感谢.

Aer*_*rik 0

怎么样:对于任何下一行包含单词且不以空白字符开头的行(例如列表中的缩进),检查该行的长度是否在 65 到 80 个字符之间。如果是,则删除尾随的 CR(如果行尾不包含空格或标点符号,则添加一个空格)。这将获取您的大部分自动换行情况,并保留您的大部分列表。