这篇文章主要介绍了PHP读取、解析eml文件及生成网页的方法,结合实例形式分析了PHP操作eml文件的读取、解析、转换等相关实现技巧与注意事项,并附带demo源码供读者下载参考,需要的朋友可以参考下

本文实例讲述了PHP读取、解析eml文件及生成网页的方法。分享给大家供大家参考,具体如下:

php读取eml实例,本实例可以将导出eml文件解析成正文,并且可以将附件保存到服务器。不多说直接贴代码了。

// Author: richard e42083458@163.com

// gets parameters

error_reporting(E_ALL ^ (E_WARNING|E_NOTICE));

header("Content-type: text/html; charset=utf-8");

echo "

";

define(EML_FILE_PATH,'./yjdata/');

//if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC4422-r7GMz_R9QF3K6XUhmJOXd4c.eml';

//if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC3218-dGquMgm7ytdF6HQgpSReC4c.eml';

//if ($filename == '') $filename = '163.eml';

//if ($filename == '') $filename = '166.eml';

//if ($filename == '') $filename = 'nyf.eml';

//if ($filename == '') $filename = 'email_header_icon.eml';

if ($filename == '') $filename = '20141230133705.eml';

$eml_file = EML_FILE_PATH.$filename;

if (!($content = fread(fopen(EML_FILE_PATH.$filename, 'rb'), filesize(EML_FILE_PATH.$filename))))

die('File not found ('.EML_FILE_PATH.$filename.')');

//标题内容

$pattern="/Subject: (.*?)\n/ims";

preg_match($pattern,$content,$subject_results);

$subject = getdecodevalue($subject_results[1]);

echo "标题:".$subject;

//发件人:

$pattern="/From: .*?/ims";

preg_match($pattern,$content,$from_results);

$from = $from_results[1];

echo "\n\r";

echo "发件人:".$from;

//收件人:

$pattern="/To:(.*?):/ims";

preg_match($pattern,$content,$to_results);

$pattern="//ims";

preg_match_all($pattern,$to_results[1],$to_results2);

if(count($to_results2[1])>0){

$to = $to_results2[1];

}else{

$pattern="/To:(.*?)\n/ims";

preg_match($pattern,$content,$to_results);

$to = $to_results[1];

}

echo "\n\r";

echo "收件人:";

print_r($to);

echo "\n\r";

//正文内容

$pattern = "/Content-Type: multipart\/alternative;.*?boundary=\"(.*?)\"/ims";

preg_match($pattern,$content,$results);

if($results[1]!=""){

$seperator = "--".$results[1];

}else{

die("boundary匹配失败");

}

$spcontent = explode($seperator, $content);

$items = array();

$keyid = 0;

$email_front_content_array = array();

foreach($spcontent as $spkey=>$item) {

//匹配header编码等信息

$pattern = "/Content-Type: ([^;]*?);.*?charset=(.*?)\nContent-Transfer-Encoding: (.*?)\n/ims";

preg_match($pattern,$item,$item_results);

if(count($item_results)==4){

$Content_code = str_replace($item_results[0],"",$item);

$item_results[4] = $Content_code;

if(trim($item_results[3])=="base64"){

$item_results[5] = base64_decode($item_results[4]);

}

if(trim($item_results[3])=="quoted-printable"){

$item_results[5] = quoted_printable_decode($item_results[4]);

}

$item_results[5] = mb_convert_encoding($item_results[5], 'UTF-8', trim($item_results[2]));

//echo $item_results[5];exit;

$email_front_content_array[] = $item_results;

}

}

foreach ($email_front_content_array as $email_front_content_each_key=>$email_front_content_each_value){

if($email_front_content_each_value[1]=='text/html'){

$content_html = $email_front_content_each_value[5];

break;

}else{

$content_html = $email_front_content_each_value[5];

}

}

echo "内容:";

echo "\n\r";

echo $content_html;

echo "\n\r";

//附件内容

$pattern = "/Content-Type: multipart\/mixed;.*?boundary=\"(.*?)\"/ims";

preg_match($pattern,$content,$results);

if($results[1]!=""){

$seperator = "--".$results[1];

$spcontent = explode($seperator, $content);

$items = array();

$keyid = 0;

$email_attachment_content_array = array();

foreach($spcontent as $spkey=>$item) {

//匹配header编码等信息

$pattern = "/Content-Type: ([^;]*?);.*?name=(.*?)\nContent-Transfer-Encoding: (.*?)\nContent-Disposition: attachment;.*?filename=(.*?)\n/ims";

preg_match($pattern,$item,$item_results);

//print_r($item_results);

if(count($item_results)==5){

$Content_code = str_replace($item_results[0],"",$item);

$item_results[5] = trim($Content_code);

if(trim($item_results[3])=="base64"){

$item_results[6] = base64_decode($item_results[5]);

}

if(trim($item_results[3])=="quoted-printable"){

$item_results[6] = quoted_printable_decode($item_results[5]);

}

$item_results[7] = str_replace("\"","",getdecodevalue($item_results[2]));

$item_results[8] = str_replace("\"","",getdecodevalue($item_results[4]));

//保存附件内容到服务器?

//符合规范的文件名时:有后缀名时。

if(strrpos($item_results[8], '.')!==false){

$ext = substr($item_results[8], strrpos($item_results[8], '.') + 1);

//$filename = "./yjdata/attachment/".date("YmdHis").mt_rand(10000,99999).".".trim($ext);

$attachment_filename = "./yjdata/attachment/".trim(str_replace("\"","",getbase64code($item_results[4]))).".".trim($ext);

mkdirs(dirname($attachment_filename));

$fp = fopen($attachment_filename, "w+");

if (flock($fp, LOCK_EX)) { // 进行排它型锁定

fwrite($fp, $item_results[6]);

flock($fp, LOCK_UN); // 释放锁定

} else {

//echo "Couldn't lock the file !";

}

fclose($fp);

$item_results[9] = $attachment_filename;

$email_attachment_content_array[] = $item_results;

}

}

}

//print_r($email_attachment_content_array);

}

if(count($email_attachment_content_array)>0){

echo "附件:";

echo "\n\r";

//附件读取

foreach($email_attachment_content_array as $email_attachment_content_each_key=>$email_attachment_content_each_value){

unset($email_attachment_content_each_value[5]);

unset($email_attachment_content_each_value[6]);

print_r($email_attachment_content_each_value[8]);

print_r($email_attachment_content_each_value[9]);

}

}

function getbase64code($content){

$pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims";

preg_match($pattern,$content,$subject_results);

if($subject_results[1]!=""){

$subject = $subject_results[1];

$charset = "GB2312";

}

elseif($subject_results[2]!=""){

$subject = $subject_results[2];

$charset = "GBK";

}

elseif($subject_results[3]!=""){

$subject = $subject_results[3];

$charset = "UTF-8";

}else{

$subject = $content;

$charset = "";

}

return $subject;

}

function getdecodevalue($content){

$pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims";

preg_match($pattern,$content,$subject_results);

if($subject_results[1]!=""){

$subject = base64_decode($subject_results[1]);

$charset = "GB2312";

}

elseif($subject_results[2]!=""){

$subject = base64_decode($subject_results[2]);

$charset = "GBK";

}

elseif($subject_results[3]!=""){

$subject = base64_decode($subject_results[3]);

$charset = "UTF-8";

}else{

$subject = $content;

$charset = "";

}

if($charset!=""){

$subject = mb_convert_encoding($subject, 'UTF-8', $charset);

}

return $subject;

}

function mkdirs($dir)

{

if(!is_dir($dir))

{

if(!mkdirs(dirname($dir))){

return false;

}

if(!mkdir($dir,0777)){

return false;

}

}

chmod($dir, 777); //给目录操作权限

return true;

}

?>

有图有真相:

php 读取 eml,php如何读取解析eml文件以及生成网页的示例分享相关推荐

  1. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx

    JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...

  2. python 读取pdf cid_python使用pdfminer解析pdf文件的方法示例

    最近要做个从 pdf 文件中抽取文本内容的工具,大概查了一下 python 里可以使用 pdfminer 来实现.下面就看看怎样使用吧. PDFMiner是一个可以从PDF文档中提取信息的工具.与其他 ...

  3. 解析json文件,生成指定数据

    #解析resultjson_path文件import os, sys, shutil, json import os.path as osp from builtins import FileNotF ...

  4. android 解析midi文件,python 解析 MIDI 文件并生成 MIDI 文件

    以下程序将 midi 文件解析出来, 并利用解析出来的音符重新生成一个一样的 midi 文件. import mido import sys import json def midifile_to_d ...

  5. java代码使用http请求解压zip包并解析xml_Javascript 是如何解析 Excel 文件的?

    最近要做一个导入导出 Excel 的功能,上一次做这个功能的时候,还是用的 Java Apache POI,这是一个用 Java 编写的免费开源的跨平台的 Java API,能够对 Microsoft ...

  6. 解析HTML文件 - 运用SgmlReader类来解析HTML文件

    运用.NET Framework类来解析HTML文件.读取数据并不是最容易的.虽然你可以用.NET Framework中的许多类(如StreamReader)来逐行解析文件,但XmlReader提供的 ...

  7. tinyxml2解析rss文件

    参考资料:xml -> rss -> tinyxml -> regex xml:XML 教程 rss:RSS 教程 tinyxml2:TinyXML-2: TinyXML-2 reg ...

  8. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  9. SAXReader saxReader = new SAXReader();来解析xml文件

    使用SAXReader需要导入dom4j-full.jar包. dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API, ...

  10. 编程模板-R语言脚本写作:最简单的统计与绘图,包安装、命令行参数解析、文件读取、表格和矢量图输出

    写在前面 个人认为:是否能熟悉使用Shell(项目流程搭建)+R(数据统计与可视化)+Perl/Python等(胶水语言,数据格式转换,软件间衔接)三门语言是一位合格生物信息工程师的标准. 之前分享过 ...

最新文章

  1. Ubuntu 13.10 安装软件失败后出现的问题——已安装 post-installation 脚本 返回了错误号 1...
  2. 炉石传说服务器维护有补偿吗,炉石传说官网维护补偿什么时候到 未到原因说明...
  3. Chapter 3 Phenomenon——24
  4. java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结
  5. 不同级别UI设计师的区别有哪些?
  6. 操作系统中避免死锁的银行家算法【表面C++实际C语言】一学就废的菜鸡代码
  7. Makefile学习之通配符和自动变量
  8. Vue工程模板文件 webpack打包
  9. 算法设计与分析课后习题答案
  10. ubuntu 18.04 更新显卡驱动
  11. Sublime Text 3使用SublimeLinter配置JS,CSS,HTML语法检查(实用)
  12. PTP(IEEE1588),TSN时间同步方法
  13. 静态链表 ( 数据结构 )
  14. matlab-gaussmf正态曲线的绘制
  15. python中的scaler_【笔记】scikit-learn中的Scaler(归一化)
  16. 腾讯会议使用OBS虚拟摄像头
  17. 这帖子,程序员的痛心疾首,我明臣哭了.
  18. PS仿制图章工具、油桶工具、渐变
  19. 转载:选一个适合自己的加密芯片,加密IC,如何才能真正的做到不被破解。
  20. 概率论与数理统计学习笔记(6)——分布律,分布函数,密度函数

热门文章

  1. Weiss Ratings公布加密货币评级结果
  2. 这是我见过最秀的代码 。。。
  3. Unity TouchScript 123木头人算法
  4. 2010年终总结报告
  5. 2023北京眼镜展览会暨首届智能眼镜展览会
  6. dell服务器主板型号怎么看,我不懂硬件,帮我看看DELL600M的主板是什么型号
  7. 基于PHP的校园失物招领平台(自动匹配推送)
  8. 转载 java基础题(面试必知)
  9. 蒂姆•库克在斯坦福毕业典礼上都讲了啥?
  10. 大数据创造智慧城市的未来之光!