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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
邮件服务器搭建的知识点包括以下几个方面: 1. 邮件服务器软件的选择:常见的邮件服务器软件有Postfix、Exim、Sendmail等。选择合适的邮件服务器软件是搭建邮件服务器的第一步。 2. 邮件服务器的配置:邮件服务器的配置包括主机名、域名、监听接口、允许接收邮件的域名、可转发的邮件网络等。这些配置项可以在邮件服务器的主配置文件中进行设置,例如Postfix的主配置文件是main.cf。 3. 邮件的存储位置和格式邮件服务器需要指定邮件的存储位置和格式。常见的存储格式Maildir和Mbox,其中Maildir是将每封邮件存储为一个文件,而Mbox是将多封邮件存储在一个文件中。存储位置可以是本地文件系统的某个目录,也可以是网络存储设备。 4. 用户邮箱的创建:为系统用户创建邮箱目录是搭建邮件服务器的一项重要任务。用户的邮箱目录通常位于用户的home目录下,可以使用命令行工具或编辑配置文件的方式进行创建。 5. 邮件的发送和接收:邮件服务器需要配置SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol 3)或IMAP(Internet Message Access Protocol)等协议来实现邮件的发送和接收功能。SMTP用于发送邮件,而POP3和IMAP用于接收邮件。 6. 安全性配置:为了保护邮件服务器的安全,需要进行一些安全性配置,例如限制邮件的大小、配置SSL/TLS加密、设置访问控制等。 7. 邮件过滤和防垃圾邮件:为了提高邮件服务器的效率和安全性,可以配置邮件过滤和防垃圾邮件功能。常见的邮件过滤技术包括黑名单、白名单、反垃圾邮件技术等。 8. 邮件服务器的监控和维护:搭建好邮件服务器后,需要进行监控和维护工作,例如监控邮件队列、定期备份邮件数据、更新软件补丁等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值