如何使用PHP提取邮件格式?

如何使用PHP提取邮件格式?,php,parsing,email,Php,Parsing,Email,我从一个数据库中提取电子邮件,在那里它们被存储为字符串。我需要解析这些电子邮件以提取它们的附件。我想已经有一些库可以轻松地完成这项工作,但我找不到任何库。这可以使用Zend Framework的Zend_Mail组件完成 也许本示例(也可在文档中找到)有助于: // get the first none multipart part $part = $message; while ($part->isMultipart()) { $part = $message->getPa

我从一个数据库中提取电子邮件,在那里它们被存储为字符串。我需要解析这些电子邮件以提取它们的附件。我想已经有一些库可以轻松地完成这项工作,但我找不到任何库。

这可以使用Zend Framework的Zend_Mail组件完成

也许本示例(也可在文档中找到)有助于:

// get the first none multipart part
$part = $message;
while ($part->isMultipart()) {
    $part = $message->getPart(1);
}
echo 'Type of this part is ' . strtok($part->contentType, ';') . "\n";
echo "Content:\n";
echo $part->getContent();
然而,我不知道如何让Zend Mail从字符串中读取,也许需要做一些工作,但这样你就有了一个完整的Fleetched库,可以做你想要的事情,还有更多(比如阅读主题等)

编辑

我只是看了第二眼,意识到您所要做的就是编写一个自己的存储实现(子类Zend_Mail_storage_Abstract),这应该不会太难做到

我认为这是你能得到的最干净的解决方案,尽管需要一点努力才能让它发挥作用

如果你正在寻找一种更快捷的解决方案,其他人可能会帮助你


希望对您有所帮助。

应该做您正在寻找的事情。

电子邮件附件是MIME编码的,并使用标题添加到邮件正文中。PEAR MIME解码包将执行您需要的操作:

PHP有一个MailParse扩展,比使用PEAR替代方法(即原生PHP)快得多

以下是包装此扩展的库:

例如:

// require mime parser library
require_once('MimeMailParser.class.php');

// instantiate the mime parser
$Parser = new MimeMailParser();

// set the email text for parsing
$Parser->setText($text);

// get attachments
$attachments = $Parser->getAttachments();

解析多部分mime消息(附件、内联图像、base64、带引号的可打印)您可以从文件、字符串中剪切mime消息

// Load .eml mime message from file
$str = file_get_contents('mime-mixed-related-alternative.eml');

// Format output
echo "<pre>";

// Create object MimeParser
$m = new PhpMimeParser($str);

// Show Emails
print_r($m->mTo);
print_r($m->mFrom);
print_r($m->mBcc);
print_r($m->mCc);

// Show Message
echo $m->mSubject;
echo $m->mHtml;
echo $m->mText;
print_r($m->mInlineList);

// Show Files
print_r($m->mFiles);
//从文件加载.eml mime消息
$str=file_get_contents('mime-mixed-related-alternative.eml');
//格式输出
回声“;
//创建对象MimeParser
$m=新的PhpMimeParser($str);
//显示电子邮件
打印($m->mTo);
打印($m->mFrom);
打印($m->mBcc);
打印($m->mCc);
//显示消息
echo$m->mSubject;
echo$m->mHtml;
echo$m->mText;
打印($m->mInlineList);
//显示文件
打印($m->m文件);

有一个更好的库:

它可以通过Composer安装

因为这个名字和谷歌代码上的名字是一样的,在这篇文章的其他地方有链接,我想它是它的继承者,但我不能说。作者信息很难在谷歌代码上找到,所以我无法确认是同一个作者

一些示例代码(来自项目自述):

//首先包括库
需要_once_uuudir_uuu.'/vendor/autoload.php';
$path='path/to/mail.txt';
$Parser=new PhpMimeMailParser\Parser();
$Parser->setStream(fopen($path,“r”);
//循环浏览所有附件
如果(计数($attachments)>0){
foreach($attachments作为$attachment){
回显“Filename:”。$attachment->getFilename()。
;//logo.jpg echo“Filesize:”.Filesize($attach_dir.$attachment->getFilename())。
;//1000 回显“文件类型:”。$attachment->getContentType()。
;//图像/jpeg 回显“MIME部分字符串:”。$attachment->getMimePartStr()。
;//(附件的整个MIME部分) } }
// Include the library first
require_once __DIR__.'/vendor/autoload.php';

$path = 'path/to/mail.txt';
$Parser = new PhpMimeMailParser\Parser();

$Parser->setStream(fopen($path, "r"));

//  Loop through all the Attachments
if (count($attachments) > 0) {
  foreach ($attachments as $attachment) {
    echo 'Filename : '.$attachment->getFilename().'<br />'; // logo.jpg
    echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br />'; // 1000
    echo 'Filetype : '.$attachment->getContentType().'<br />'; // image/jpeg
    echo 'MIME part string : '.$attachment->getMimePartStr().'<br />'; // (the whole MIME part of the attachment)
  }
}