当前位置:首页 > PHP教程 > php文件操作 > 列表

PHP实例:读取、解析eml文件以及生成网页

发布:smiling 来源: PHP粉丝网  添加日期:2018-06-04 11:17:59 浏览: 评论:0 

PHP是现今很多编程人员会经常使用到的,它有着非常大的作用,能为我们带来很大的便利。这次文章就给大家分享个实例,通过PHP读取、解析文件以及生成网页,这也是一个非常不错的应用,下面我们具体来看看实现代码。

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

  1. <?php 
  2. // Author: richard e42083458@163.com 
  3. // gets parameters 
  4. error_reporting(E_ALL ^ (E_WARNING|E_NOTICE)); 
  5. header("Content-type: text/html; charset=utf-8"); 
  6. echo "<pre>"
  7. define(EML_FILE_PATH,'./yjdata/'); 
  8. //if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC4422-r7GMz_R9QF3K6XUhmJOXd4c.eml'; 
  9. //if ($filename == '') $filename = '21724696_niuyufu@qiaodazhao.com_ZC3218-dGquMgm7ytdF6HQgpSReC4c.eml'; 
  10. //if ($filename == '') $filename = '163.eml'; 
  11. //if ($filename == '') $filename = '166.eml'; 
  12. //if ($filename == '') $filename = 'nyf.eml'; 
  13. //if ($filename == '') $filename = 'email_header_icon.eml'; 
  14. if ($filename == ''$filename = '20141230133705.eml'
  15. $eml_file = EML_FILE_PATH.$filename
  16. if (!($content = fread(fopen(EML_FILE_PATH.$filename'rb'), filesize(EML_FILE_PATH.$filename)))) 
  17.   die('File not found ('.EML_FILE_PATH.$filename.')'); 
  18. //标题内容 
  19. $pattern="/Subject: (.*?)\n/ims"
  20. preg_match($pattern,$content,$subject_results); 
  21. $subject = getdecodevalue($subject_results[1]); 
  22. echo "标题:".$subject
  23. //发件人: 
  24. $pattern="/From: .*?<(.*?)>/ims"
  25. preg_match($pattern,$content,$from_results); 
  26. $from = $from_results[1]; 
  27. echo "\n\r"
  28. echo "发件人:".$from
  29. //收件人: 
  30. $pattern="/To:(.*?):/ims"
  31. preg_match($pattern,$content,$to_results); 
  32. $pattern="/<(.*?)>/ims"
  33. preg_match_all($pattern,$to_results[1],$to_results2); 
  34. if(count($to_results2[1])>0){ 
  35.   $to = $to_results2[1]; 
  36. }else
  37.   $pattern="/To:(.*?)\n/ims"
  38.   preg_match($pattern,$content,$to_results); 
  39.   $to = $to_results[1]; 
  40. echo "\n\r"
  41. echo "收件人:"
  42. print_r($to); 
  43. echo "\n\r"
  44. //正文内容 
  45. $pattern = "/Content-Type: multipart\/alternative;.*?boundary=\"(.*?)\"/ims"
  46. preg_match($pattern,$content,$results); 
  47. if($results[1]!=""){ 
  48.   $seperator = "--".$results[1]; 
  49. }else
  50.   die("boundary匹配失败"); 
  51. $spcontent = explode($seperator$content); 
  52. $items = array(); 
  53. $keyid = 0; 
  54. $email_front_content_array = array(); 
  55. foreach($spcontent as $spkey=>$item) { 
  56.   //匹配header编码等信息 
  57.   $pattern = "/Content-Type: ([^;]*?);.*?charset=(.*?)\nContent-Transfer-Encoding: (.*?)\n/ims"
  58.   preg_match($pattern,$item,$item_results); 
  59.   if(count($item_results)==4){ 
  60.     $Content_code = str_replace($item_results[0],"",$item); 
  61.     $item_results[4] = $Content_code
  62.     if(trim($item_results[3])=="base64"){ 
  63.       $item_results[5] = base64_decode($item_results[4]); 
  64.     } 
  65.     if(trim($item_results[3])=="quoted-printable"){ 
  66.       $item_results[5] = quoted_printable_decode($item_results[4]); 
  67.     } 
  68.     $item_results[5] = mb_convert_encoding($item_results[5], 'UTF-8', trim($item_results[2])); 
  69.     //echo $item_results[5];exit; 
  70.     $email_front_content_array[] = $item_results
  71.   } 
  72. foreach ($email_front_content_array as $email_front_content_each_key=>$email_front_content_each_value){ 
  73.   if($email_front_content_each_value[1]=='text/html'){ 
  74.     $content_html = $email_front_content_each_value[5]; 
  75.     break
  76.   }else
  77.     $content_html = $email_front_content_each_value[5]; 
  78.   } 
  79. echo "内容:"
  80. echo "\n\r"
  81. echo $content_html
  82. echo "\n\r"
  83. //附件内容 
  84. $pattern = "/Content-Type: multipart\/mixed;.*?boundary=\"(.*?)\"/ims"
  85. preg_match($pattern,$content,$results); 
  86. if($results[1]!=""){ 
  87.   $seperator = "--".$results[1]; 
  88.   $spcontent = explode($seperator$content); 
  89.   $items = array(); 
  90.   $keyid = 0; 
  91.   $email_attachment_content_array = array(); 
  92.   foreach($spcontent as $spkey=>$item) { 
  93.     //匹配header编码等信息 
  94.     $pattern = "/Content-Type: ([^;]*?);.*?name=(.*?)\nContent-Transfer-Encoding: (.*?)\nContent-Disposition: attachment;.*?filename=(.*?)\n/ims"
  95.     preg_match($pattern,$item,$item_results); 
  96.     //print_r($item_results); 
  97.     if(count($item_results)==5){ 
  98.       $Content_code = str_replace($item_results[0],"",$item); 
  99.       $item_results[5] = trim($Content_code); 
  100.       if(trim($item_results[3])=="base64"){ 
  101.         $item_results[6] = base64_decode($item_results[5]); 
  102.       } 
  103.       if(trim($item_results[3])=="quoted-printable"){ 
  104.         $item_results[6] = quoted_printable_decode($item_results[5]); 
  105.       } 
  106.       $item_results[7] = str_replace("\"","",getdecodevalue($item_results[2])); 
  107.       $item_results[8] = str_replace("\"","",getdecodevalue($item_results[4])); 
  108.       //保存附件内容到服务器? 
  109.       //符合规范的文件名时:有后缀名时。 
  110.       if(strrpos($item_results[8], '.')!==false){ 
  111.         $ext = substr($item_results[8], strrpos($item_results[8], '.') + 1); 
  112.         //$filename = "./yjdata/attachment/".date("YmdHis").mt_rand(10000,99999).".".trim($ext); 
  113.         $attachment_filename = "./yjdata/attachment/".trim(str_replace("\"","",getbase64code($item_results[4]))).".".trim($ext); 
  114.         mkdirs(dirname($attachment_filename)); 
  115.         $fp = fopen($attachment_filename"w+"); 
  116.         if (flock($fp, LOCK_EX)) { // 进行排它型锁定 
  117.           fwrite($fp$item_results[6]); 
  118.           flock($fp, LOCK_UN); // 释放锁定 
  119.         } else { 
  120.           //echo "Couldn't lock the file !"; 
  121.         } 
  122.         fclose($fp); 
  123.         $item_results[9] = $attachment_filename
  124.         $email_attachment_content_array[] = $item_results
  125.       } 
  126.     } 
  127.   } 
  128.   //print_r($email_attachment_content_array); 
  129. if(count($email_attachment_content_array)>0){ 
  130.   echo "附件:"
  131.   echo "\n\r"
  132.   //附件读取 
  133.   foreach($email_attachment_content_array as $email_attachment_content_each_key=>$email_attachment_content_each_value){ 
  134.     unset($email_attachment_content_each_value[5]); 
  135.     unset($email_attachment_content_each_value[6]); 
  136.     print_r($email_attachment_content_each_value[8]); 
  137.     print_r($email_attachment_content_each_value[9]); 
  138.   } 
  139. function getbase64code($content){ 
  140.   $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims"
  141.   preg_match($pattern,$content,$subject_results); 
  142.   if($subject_results[1]!=""){ 
  143.     $subject = $subject_results[1]; 
  144.     $charset = "GB2312"
  145.   } 
  146.   elseif($subject_results[2]!=""){ 
  147.     $subject = $subject_results[2]; 
  148.     $charset = "GBK"
  149.   } 
  150.   elseif($subject_results[3]!=""){ 
  151.     $subject = $subject_results[3]; 
  152.     $charset = "UTF-8"
  153.   }else
  154.     $subject = $content
  155.     $charset = ""
  156.   } 
  157.   return $subject
  158. function getdecodevalue($content){ 
  159.   $pattern="/=\?GB2312\?B\?(.*?)\?=|=\?GBK\?B\?(.*?)\?=|=\?UTF-8\?B\?(.*?)\?=/ims"
  160.   preg_match($pattern,$content,$subject_results); 
  161.   if($subject_results[1]!=""){ 
  162.     $subject = base64_decode($subject_results[1]); 
  163.     $charset = "GB2312"
  164.   } 
  165.   elseif($subject_results[2]!=""){ 
  166.     $subject = base64_decode($subject_results[2]); 
  167.     $charset = "GBK"
  168.   } 
  169.   elseif($subject_results[3]!=""){ 
  170.     $subject = base64_decode($subject_results[3]); 
  171.     $charset = "UTF-8"
  172.   }else
  173.     $subject = $content
  174.     $charset = ""
  175.   } 
  176.   if($charset!=""){ 
  177.     $subject = mb_convert_encoding($subject'UTF-8'$charset); 
  178.   } 
  179.   return $subject
  180. function mkdirs($dir
  181.   if(!is_dir($dir)) 
  182.   { 
  183.     if(!mkdirs(dirname($dir))){ 
  184.       return false; 
  185.     } 
  186.     if(!mkdir($dir,0777)){ 
  187.       return false; 
  188.     } //phpfensi.com 
  189.   } 
  190.   chmod($dir, 777);  //给目录操作权限 
  191.   return true; 
  192. ?> 

Tags: 实例 文件 网页

分享到: