博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 解析Maildir 邮件格式(eml文件)
阅读量:6152 次
发布时间:2019-06-21

本文共 2458 字,大约阅读时间需要 8 分钟。

  hot3.png

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为inofunction 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);}

转载于:https://my.oschina.net/hxily/blog/813811

你可能感兴趣的文章
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>