php 处理eml,PHP 解析Maildir 邮件格式(eml文件)

1.解析邮件头

# $mailfile为邮件文件路径

function parsemail($mailfile){

echo $mailfile."
";

if(file_exists($mailfile)){

$fp = fopen($mailfile, "r");

if (!$fp){

die("open mailfile failed!");

}else{

while(($line = chop(fgets($fp,1024))) && $line !== ""){

echo htmlspecialchars($line)."
";

}

}

fclose($fp);

}else{

echo "file not exists";

}

}

2.根据文件名和ino号查找邮件文件

# $mid为ino

function getmailfile($mid,$mailpath){

$newpath = $mailpath."/new/";

$curpath = $mailpath."/cur/";

$newhandle = opendir($newpath);

while(($file = readdir($newhandle)) !== false ){

if ($file != "." && $file != ".." && stat($newpath.$file)['ino'] == $mid){

$mailfile = $newpath.$file;

}

}

closedir($newhandle);

$curhandle = opendir($curpath);

while(($file = readdir($curhandle)) !== false ){

if ($file != "." && $file != ".." && stat($curpath.$file)['ino'] == $mid){

$mailfile = $curpath.$file;

}

}

closedir($curhandle);

return $mailfile;

}

3.用parsemail函数

function parsemail($mailfile){

$mime = mailparse_msg_parse_file($mailfile);

$struct = mailparse_msg_get_structure($mime);

foreach ($struct as $x => $y) {

$section = mailparse_msg_get_part($mime, $y);

$info = mailparse_msg_get_part_data($section);

if ($info["content-disposition"] == 'attachment'){

# 附件名编码过的要解码

$filename = Decode_mime($info["content-name"]);

ob_start();

mailparse_msg_extract_part_file($section, $mailfile);

$content = ob_get_contents();

ob_end_clean();

# 把附件写到临时目录

$fh = fopen("/home/temp/".$filename,"w+");

fwrite($fh, $content);

fclose($fh);

}

}

}

function Decode_mime($Str){

if( substr_count($Str,'=?')==0 ) return $Str;

list($Token,$Charset,$Encoding,$Str,$End) = preg_split('/\?/',$Str,5);

$End = preg_replace("/^\=/","",$End);

$Token = preg_replace("/\=/","",$Token);

$Encoding = strtolower($Encoding);

switch($Encoding){

case 'b':

$Text = trim(base64_decode($Str));

break;

case 'q':

$Text = trim(quoted_printable_decode($Str));

}

if( substr_count($End,'=?')!=0 ) $End = Decode_mime($End);

return iconv($Charset,"utf-8//IGNORE",$Token.$Text.$End);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值