PHP读取、解析eml文件及生成网页的方法示例


Posted in PHP onSeptember 04, 2017

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

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

<?php
// Author: richard e42083458@163.com
// gets parameters
error_reporting(E_ALL ^ (E_WARNING|E_NOTICE));
header("Content-type: text/html; charset=utf-8");
echo "<pre>";
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程序设计有所帮助。

PHP 相关文章推荐
[转帖]PHP世纪万年历
Dec 06 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
yii中widget的用法
Dec 03 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
php中Snoopy类用法实例
Jun 19 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
Laravel 集成 Geetest验证码的方法
May 14 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
May 02 PHP
php中yar框架实例用法讲解
Dec 27 PHP
PHP钩子与简单分发方式实例分析
Sep 04 #PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 #PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 #PHP
php简单读取.vcf格式文件的方法示例
Sep 02 #PHP
PHP实现简单的模板引擎功能示例
Sep 02 #PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 #PHP
PHP设计模式之工厂模式实例总结
Sep 01 #PHP
You might like
php下封装较好的数字分页方法
2010/11/23 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
详解php中curl返回false的解决办法
2019/03/18 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
5个javascript的数字格式化函数分享
2011/12/07 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
Vue自定义弹窗指令的实现代码
2018/08/13 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
python用字典统计单词或汉字词个数示例
2014/04/22 Python
Python中的MongoDB基本操作:连接、查询实例
2015/02/13 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
研究生自荐信
2013/10/09 职场文书
2014年会计工作总结
2014/11/27 职场文书
开天辟地观后感
2015/06/09 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js