2009-08-06 41 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);