php 处理eml,PHP怎么读取或解析eml文件_PHP怎么生成网页_一聚教程网

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

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

";

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;

}

?>

有图有真相:

fb11032b05ba3d61a8f7a04301ad4991.png

55ffaa8cfa.png?20178494454

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值