前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用php-mime-mail-parser解析邮件扩展格式的doc文件

使用php-mime-mail-parser解析邮件扩展格式的doc文件

作者头像
猿哥
发布2019-08-01 12:23:40
1.2K0
发布2019-08-01 12:23:40
举报
文章被收录于专栏:Web技术布道师

有一种 doc 文件, office word 可以正常打开,但当你想像其他 doc 文件一样使用 libreoffice 去操作它的时候会发现里面全是字符串,使用一个编辑器(比如 Sublime Text )打开后发现,里面的内容是这样的:

代码语言:javascript
复制
From:<由XXX 生成>
Subject: Resume
MIME-Version:1.0
X-51JOB-FLAG:EhireExport_20190527_15590388
Content-Type:multipart/related;boundary="--boundary_0_9ed30801b0c180c69b3c5d74fede848e"

----boundary_0_9ed30801b0c180c69b3c5d74fede848e
Content-Type:text/html;charset="gb2312"
Content-Transfer-Encoding:base64


PGh0bWw+PGJvZHk+PHRhYmxlIHdpZHRoPSc3MDInIGhlaWdodD0nNjInIGJvcmRlcj0nMCcgYWxp
Z249J2NlbnRlcicgY2VsbHBhZGRpbmc9JzAnIGNlbGxzcGFjaW5nPScwJz48dHI+PHRkIHdpZHRo
PSc2MiUnIGhlaWdodD0nNTAnIGFsaWduPSdsZWZ0JyB2YWxpZ249J2JvdHRvbScgY2xhc3M9J3Rv
cCc+PGJyIC8+uPzQwsqxvOSjujxzcGFuIHN0eWxlPSJjb2xvcjojMjU2ZmI4OyI+MjAxOS0wNS0y
Mzwvc3Bhbj48L3RkPjx0ZCB3aWR0aD0nMzclJyBhbGlnbj0ncmlnaHQnIHZhbGlnbj0nYm90dG9t
Jz48aW1nIHdpZHRoPScxMjAnIGhlaWdodD0nNTAnIHNyYz0iY2lkOjZjM2U4MmRjLTNhZGEtNDNj
MS05NDdjLTc3OWY2YzI5MWRjZiIgLz48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9Ijcw
MyIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9
IjAiID48dHI+PHRkPjxodG1sIHhtbG5zOmNvZGU9InVybjplaGlyZS54c2x0LmV4dGVuc2lvbiI+
PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7
IGNoYXJzZXQ9Z2IyMzEyIj48c3R5bGU+DQogICAgICAgICAgI3RvcENoYXJ0eyBiYWNrZ3JvdW5k
...

经过一番探究,这是一份被编码的邮件格式文件,既然邮件格式,当然是有东西可以把它解码的,又经过一番探究,我找到了这个包 php-mime-mail-parser/php-mime-mail-parser ,于是就有了办法。

注意,在使用 php-mime-mail-parser 之前,需要安装 phpmailparse 扩展,请参考项目 GitHub ,上代码:

代码语言:javascript
复制
public function actionMht()
{
    $file = Yii::getAlias('@runtime') . '/20190527.doc';
    if($this->isMht($file)) {
        $parser = new PhpMimeMailParser\Parser();
        $parser->setText(file_get_contents($file));
        $body = $parser->getMessageBody('html');
        $body = str_replace(['charset=gb2312','charset=gbk'], 'charset=utf-8', $body);
        $htmlFile = Yii::getAlias('@runtime') . '/20190527,刘艳,前程.html';
        file_put_contents($htmlFile, $body);
    }
}


public function isMht($file)
{
    $fileData = fopen($file, "r");
    $header = '';
    while(!feof($fileData))
    {
        $data = str_replace(["\n", "\s", "\r\n"], '', fgets($fileData));
        $header .= $data;
        if($data == '') {
            break;
        }
    }
    fclose($fileData);
    return strpos($header, 'MIME-Version') !== false;
}

先通过 MIME-Version 特征去判断是不是这种格式,然后使用 php-mime-mail-parser 解析,然后将其存储为 html 文件并将编码 html 转换成 utf-8 完成转换,这些特征提取和编码转换只是根据项目中的文件来判断,如果你也是这种文件,可以针对自己待处理的文件做出相应的调整以达到更好的效果。

这个解析器还有很多其他内容提取的方法,非常方便,更多用法参考 GitHub

php-mime-mail-parser 项目 GitHub 地址: php-mime-mail-parser/php-mime-mail-parser

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHP技术大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档