2009-08-06 66 views
2

我从数据库中提取电子邮件作为字符串存储。我需要解析这些电子邮件以提取他们的附件。我想一定有一些图书馆可以很容易地做到这一点,但我找不到任何图书馆。如何使用PHP提取邮件atachment?

回答

1

这可以使用Zend框架

也许这个例子中的的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从字符串中读取数据,也许需要做一些工作来完成这个任务,但是你会有一个完整的库,可以完成你想要的和更多的工作(比如读取主题等)。

编辑

我刚做了它第二次看,并意识到,你所要做的就是写一个自己的存储实现(子类Zend_Mail_Storage_Abstract),这不应该是这么难的事。

我认为这是您将得到的最干净的解决方案,尽管需要一点努力才能使其工作。

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

希望有所帮助。

3

PHP有一个MailParse扩展,比使用原生PHP的PEAR替代方法要快得多。

这里是一个封装此扩展库:

http://code.google.com/p/php-mime-mail-parser/

实施例:

// 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(); 
1

PhpMimeParser - 解析多部分MIME消息(附件,内嵌图像,BASE64,引号的可打印)https://github.com/breakermind/PhpMimeParser您可以从文件,字符串中剪切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);