使用$cat -A xx.eml文件,发现foxmail的eml文件文件结尾和空行使用的\r\r\n,

如:

Received: from WDGTO0MYSBX754J (unknown [106.39.222.102])^M^M$
^Iby smtp10 (Coremail) with SMTP id DsCowABnE2wPf8pW4XqYBw--.24431S2;^M^M$
^IMon, 22 Feb 2016 11:22:56 +0800 (CST)^M^M$
Date: Mon, 22 Feb 2016 11:23:17 +0800^M^M$
From: "postmaster@test.com" <postmaster@test.com>^M^M$
To: postmaster <postmaster@test.com>^M^M$
Subject: ccc^M^M$
X-Priority: 3^M^M$
X-GUID: BF101B77-22A1-4EFA-9ECE-DE1849536DD4^M^M$
X-Has-Attach: no^M^M$
X-Mailer: Foxmail 7, 2, 7, 26[cn]^M^M$
Mime-Version: 1.0^M^M$
Message-ID: <postmaster@test.com>^M^M$
Content-Type: multipart/alternative;^M^M$
^Iboundary="----=_001_NextPart126808224252_=----"^M^M$
X-CM-TRANSID:DsCowABnE2wPf8pW4XqYBw--.24431S2^M^M$
X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73^M^M$
^IVFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjTRVpBfUUUUU^M^M$
X-Originating-IP: [106.39.222.102]^M^M$
X-CM-SenderInfo: 5fqox3ltk6il2tof0z/xtbBDhIXjFQG4BtVJQAAse^M^M$
^M^M$
This is a multi-part message in MIME format.^M^M$
^M^M$
------=_001_NextPart126808224252_=----^M^M$
Content-Type: text/plain;^M^M$
^Icharset="us-ascii"^M^M$
Content-Transfer-Encoding: base64^M^M$
^M^M$
Y2NjDQoNCg==^M^M$
^M^M$
------=_001_NextPart126808224252_=----^M^M$
Content-Type: text/html;^M^M$
^Icharset="us-ascii"^M^M$
Content-Transfer-Encoding: quoted-printable^M^M$
^M^M$
cccc^M^M$
------=_001_NextPart126808224252_=------^M^M$

但是Mail_mimeDecode中用来分段header和body的函数中是

function _splitBodyHeader($input)
{
if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) {
return array($match[1], $match[2]);
}
// bug #17325 - empty bodies are allowed. - we just check that at least one line
// of headers exist..
if (count(explode("\n",$input))) {
return array($input, '');
}
$this->_error = 'Could not split header and body';
return false;
}

可以发现其中的正则表达式"/^(.*?)\r?\n\r?\n(.*)/s"中的\r?无法匹配成功eml文件的空行,它只能匹配0个或1个\r,所以将preg_match中的正则表达式换成

preg_match("/^(.*?)\r*\n\r*\n(.*)/s

用来匹配0个或多个\r即可。

php中Mail_mimeDecode无法读取foxmail等eml文件正文问题的更多相关文章

  1. Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案

    注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...

  2. Spring中配置和读取多个Properties文件--转

    public class PropertiesFactoryBeanextends PropertiesLoaderSupportimplements FactoryBean, Initializin ...

  3. Spring中配置和读取多个Properties文件

    一个系统中通常会存在如下一些以Properties形式存在的配置文件 1.数据库配置文件demo-db.properties: database.url=jdbc:mysql://localhost/ ...

  4. struts2中从后台读取数据到<s:select>

    看到网上好多有struts2中从后台读取数据到<s:select>的,但都 不太详细,可能是我自己理解不了吧!所以我自己做了 一个,其中可能 有很多不好的地方,望广大网友指出 结果如图 p ...

  5. DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)

    /// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...

  6. C#中常用的读取xml的几种方法(转)

    本文完全来源于http://blog.csdn.net/tiemufeng1122/article/details/6723764,仅作个人学习之用. XML文件是一种常用的文件格式,例如WinFor ...

  7. 在C#中创建和读取XML文件

    1.创建简单的XML文件 为了便于测试,我们首先创建控制台应用程序,项目命名为CreateXml,Program.cs代码如下: 这样会在C盘根目录下创建data2.xml文件,文件内容为 using ...

  8. 内容写到 csv 格式的文件中 及 读取 csv 格式的文件内容

    <?php/*把内容写到 csv 格式的文件中 基本思路是:1.用 $fp = fopen("filename", 'mode')打开一个csv文件,可以是打开时才建立的2. ...

  9. java中利用RandomAccessFile读取超大文件

    超大文件我们使用普通的文件读取方式都很慢很卡,在java中为我提供了RandomAccessFile函数,可以快速的读取超大文件并且不会感觉到卡哦,下面看我的一个演示实例. 服务器的日志文件往往达到4 ...

随机推荐

  1. 权限组件(11):基于formset实现批量增加

    效果图: 增加页面: 编辑页面: 因为后面要对权限进行批量操作,所以先用这个示例演示下如何实现批量操作 数据库 from django.db import models class Menu(mode ...

  2. Spark性能优化:资源调优篇

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  3. 产生指定时间区间序列、按指定单位变化时间 python实现

    示例1:给定起始日期和结束日期,如何得到中间的时间序列 import datetime def dateRange(beginDate, endDate): dates = [] dt = datet ...

  4. 程序集链接器(AL.exe)

    AL.exe使用程序可以生成一个EXE文件或者DLL PE文件(其中只包含对其他模块中的类型进行描述的一个清单). 不要在普通的命令行窗口中编译,请先打开C:\ProgramData\Microsof ...

  5. STL学习笔记3--deque

    看这一节,是为了下一节的使用,在ogre3d里有些操作要使用到deque. C++ Deque(双向队列) 的使用 Deque结合了vector  和list  优缺点,是一种使用简单的容器. deq ...

  6. Python 拓展之特殊函数(lambda 函数,map 函数,filter 函数,reduce 函数)

    写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 "函数式编程" 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣 ...

  7. github 客户端总是登录失败,提示密码错误

    把输入法调成英文即可!!

  8. pq

    pq 题目描述 小q 的女朋友送给小q nn个整数.但是这些数太大了,小q 的女朋友拿不动,于是拜托小q把这些数减少一些. 小q 每次可以选择其中的两个x,yx,y (不能同时选择同一个数) 变成x− ...

  9. Codeforces Round #315 (Div. 2) A 水且坑

    A. Music time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  10. php合并图片

    <?php class image{ /** * @param string $backgroundImage 背景图 * @param string $smallImage 小图 * @par ...