发送电子邮件时,许多服务器会添加额外的换行符以限制每行的长度 .

在PHP脚本中获取电子邮件时,如何恢复 original 换行符?

示例

假设我发送以下内容:

Lorem ipsum Dolore incididunt in culpa ea ea sed quis sint voluptate quis laborum ullamco Excepteur do adipisicing consequat ex in reprehenderit officia in ad deserunt magna nulla dolor laborum occaecat reprehenderit aliquip dolor ea anim ea in veniam adipisicing culpa tempor qui elit voluptate consectetur elit laboris minim consectetur laboris anim incididunt Ut sunt sunt mollit elit irure do cillum dolore consequat in ea culpa ut velit sunt nulla in dolore voluptate dolore laborum reprehenderit dolore ut . 在动画dolore ullamco pariatur前阿梅德法无Excepteur mollit正式开通了fugiat欧盟UT非在veniam enim微量ELIT广告UT ID;广告欧盟voluptate cillum悲laboris irure tempor mollit dolore实习eiusmod EA非EA ullamco nostrud cillum nostrud laborum commodo ESSE reprehenderit UT deserunt正式开通了做SED QUIS暂准fugiat悲EA commodo UT里consequat consectetur UT法无pariatur EST悲dolore非UT occaecat正式开通了必须遵守DUIS UT前实习ESSE ullamco法无incididunt commodo pariatur dolore nostrud fugiat ID悲微量非烧结靶阿梅德adipisicing occaecat enim非UT广告irure烧结靶aliquip nisi ut commodo minim proident elit nulla quis ut ad dolor Excepteur dolore Duis .

请注意,本文中只有一个换行符!

使用Thunderbird在接收端检查电子邮件的源代码,或通过PHP获取电子邮件正文,内容格式如下:

Lorem ipsum Dolore incididunt in culpa ea ea sed quis sint voluptate quis laborum ullamco Excepteur do adipisicing consequat ex in reprehenderit officia in ad deserunt magna nulla dolor laborum occaecat reprehenderit aliquip dolor ea anim ea in veniam adipisicing culpa tempor qui elit voluptate consectetur elit laboris minim consectetur laboris anim incididunt Ut sunt sunt mollit elit irure do cillum dolore consequat in ea culpa ut velit sunt nulla in dolore voluptate dolore laborum reprehenderit dolore ut . 在动画dolore ullamco pariatur前阿梅德法无Excepteur mollit正式开通了fugiat欧盟UT非在veniam enim微量ELIT广告UT ID;广告欧盟voluptate cillum悲laboris irure tempor mollit dolore实习eiusmod EA非EA ullamco nostrud cillum nostrud laborum commodo ESSE reprehenderit UT deserunt正式开通了做SED QUIS暂准fugiat悲EA commodo UT里consequat consectetur UT法无pariatur EST悲dolore非UT occaecat正式开通了必须遵守DUIS UT前实习ESSE ullamco法无incididunt commodo pariatur dolore nostrud fugiat ID悲微量非烧结靶阿梅德adipisicing occaecat enim非UT广告irure烧结靶aliquip nisi ut commodo minim proident elit nulla quis ut ad dolor Excepteur dolore Duis .

请注意,每行限制为一定长度,因此存在16个额外的换行符 . 这些额外的换行符会自动添加到导致我收到电子邮件的事件链中的某个位置 .

我希望我的电子邮件获取PHP脚本删除其他换行符以恢复内容的原始两行格式 .

I know that the new line breaks are not added in by the PHP script, I know where they come from, what I do not know is how I could make my PHP script remove those line breaks.

以下是用于获取电子邮件正文的代码:

$connection = imap_open(
    sprintf(
        '{%s:110/pop3}INBOX',
        Configure::read('Email.Inbox.host')
    ),
    Configure::read('Email.Inbox.email'),
    Configure::read('Email.Inbox.password')
);

$mailbox = imap_check($connection);
$messages = imap_fetch_overview($connection, '1:' . $mailbox->Nmsgs); 

foreach($messages as $message) {
    $content = imap_fetchbody($connection, $message->msgno, 1);
}

What have I tried?

我尝试使用 imap_body 而不是 imap_fetchbody ,因为前者不处理电子邮件正文 . 但是在此之前已经存在额外的换行符,并且与常规换行符无法区分 . 两者都包含 \r\n .

我假设必须有一种方法可以做到这一点,因为Thunderbird显示收到的电子邮件格式正确,没有额外的16个换行符,尽管它们出现在显示消息的源代码中 . 因此,可能必须有一种方法可以从电子邮件中删除额外的16个换行符 .

以下是Thunderbird的屏幕截图,其中显示了顶部电子邮件的源代码以及底部显示的纯文本显示 .

What is this magic? Teach me, master!