文档章节

PHP 解析Maildir 邮件格式(eml文件)

 超级超级管理员
发布于 2016/12/28 15:29
字数 273
阅读 38
收藏 0

1.解析邮件头

# $mailfile为邮件文件路径
function parsemail($mailfile){
    echo $mailfile."<br>";
    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)."<br>";
         }       
        }   
        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);
}

© 著作权归作者所有

粉丝 2
博文 191
码字总数 80765
作品 0
成都
运维
私信 提问
Thunderbird 68.0 发布,邮件工具

Thunderbird 是一个支持 IMAP、POP3 的邮件客户端工具,它提供了一个向导程序,能导入来自 Outlook 和 Outlook Express 的邮件和邮箱地址。68.0 版本已经发布了,新特性如下: 此版本可以安装...

afterer
08/30
2.3K
10
pythom email postfix 邮件发送

用于交换的邮件格式是 eml 包含一个邮件的所有数据,在thunderbird 中可以直接保存某个邮件为eml格式 python的email 模块可以分析eml格式 http://docs.python.org/2/library/email.message.h...

李勇2
2013/03/22
104
0
本地eml文件中附件的名字为中文为什么解析不了

代码如下,附件文件名是中文就解析不了,英文就可以~~哪位大侠可以帮小女解决一下~急!! /** * eml格式的邮件解析附件 * @author Administrator * */ public class MimeTest { private Str...

梅梅
2013/02/27
491
0
Aspose.Email for .NET 1.4.0 发布

Aspose.Email for .NET 1.4.0 发布了,该版本提供了 EML 文件的验证功能,同时提供 WPF 和 Visual Studio 2010 的拖放操作支持,MapiMessage 支持数字签名,用户可轻松设置 HELO/EHLO 字符串...

红薯
2012/02/28
234
0
「深入 Exchange 2013」18 队列 part3

队列优先级 Exchange 2013当中,微软增加了一个“优先队列”的功能,打开它时,被标记为高优先级的邮件会比一般邮件先传送,而被标记为低优先级的邮件则会比一般邮件后传送;开启该功能之后呢...

sodaxu
2015/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 不要在领导修风扇的时候打开电扇

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :《Whats Up》 主唱妹子 Lina Perry 的嗓音实在太有力了,收放自如的自信才能唱出这么优秀的歌吧!#今日歌曲推荐# 《Whats Up》-...

小小编辑
今天
11
0
SpringBoot集成Elasticsearch并进行增删改查操作

一、创建工程 使用IntelliJ创建SpringBoot工程 SpringBoot版本为2.0.4 ElasticSearch为5.6.10 删掉蓝框中的文件(如上) 最后我们的目录结构(如下) 下面pom文件主要修改的是把spring boot从Int...

一字见心
今天
5
0
x001-版本介绍

python版本介绍 目前有2 和 3 有很多企业用的代码是2版本,随着技术的发展,以后用3的会成为大趋势 python3的安装 yum -y install wget gcc zlib-devel bzip2-devel openssl-devel ncurses-d...

侠客行之石头
今天
5
0
聊聊rocketmq的TransientStorePool

序 本文主要研究一下rocketmq的TransientStorePool TransientStorePool rocketmq-all-4.6.0-source-release/store/src/main/java/org/apache/rocketmq/store/TransientStorePool.java publi......

go4it
昨天
6
0
笔记

场外借贷, 质押 ,托管, 永续合约. 场外借贷,n签合同. 新功能 证券交易组负责中信证券机构及个人投资交易相关系统,服务机构及个人投资客户, 涉及到两融、期权、 期货、做市等境内境外创新业...

MtrS
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部