2009-10-26 43 views
8

當我知道我的cPanel主機我能管的電子郵件收件箱中的腳本,但我想要做的是:提取附件管道郵件到PHP

  1. 發送到[email protected]
  2. 管mail.php
  3. mail.php讀取主題,一個.txt附件
  4. 主題和.txt附件的內容存儲在數據庫中

是有一種方法可以直接使用PHP來做到這一點嗎?

回答

5

您可能需要執行以下操作:

  1. 寫一個PHP腳本的可執行文件的CLI(通過在指向PHP程序的腳本的頂部添加#聲明,然後設置其可執行權限)。

  2. 讓這個腳本從PHP讀取原始郵件://標準輸入(的file_get_contents是最容易)

  3. 讓這個腳本中的部分,郵件解碼使用像PEAR ::郵件::啞劇::解碼或我認爲有一個方便的Zend框架組件)。

  4. 閱讀來自所述經解碼消息的附件和主題,並且存儲爲正常

  5. 出口(0)在端告訴CLI,這是一個乾淨出口 - 任何其它出口()狀態可能導致反彈的電子郵件。

+0

謝謝!我是新的可執行文件,所以需要看看它,你知道任何可能對我有用的鏈接:) – tarnfeld

5

存在一個PHP庫,名爲php-mime-mail-parser,它本身取決於PECL mailparse library。當你安裝這些,代碼來實現你想要什麼是很直截了當:

<?php 
require_once 'MimeMailParser.class.php'; 

$parser = new MimeMailParser(); 
$parser->setStream(STDIN); 

$subject = $parser->getHeader('subject'); 

$attachment_content = false; 
foreach ($parser->getAttachments() as $attachment) { 
    $extension = pathinfo($attachment->filename, PATHINFO_EXTENSION); 
    if ($extension == "txt") { 
     $attachment_content = $attachment->content; 
     break; 
    } 
} 

// adapt to what ever database you are using 
$sth = $mysqli->prepare("INSERT INTO mails (subject, attachment) VALUES (:subject, :attachment)"); 
$sth->bindParam(':subject', $subject, PDO::PARAM_STR); 
$sth->bindParam(':attachment', $attachment_content, PDO::PARAM_STR); 
$sth->execute(); 

可以通過管道郵件到腳本,因爲它從STDIN讀取。您也可以通過將setStream更改爲setPath來從文件中讀取。請參閱documentation of the library

+3

這應該是正確的答案 – Daniel

+0

需要什麼樣的改變來保存和存儲PDF文件?是否有任何加密或編碼需要處理或只是將TXT更改爲PDF? – Tarquin

+0

在數據庫字段中存儲PDF文件的內容不是我推薦的。最好將其存儲到文件系統並存儲路徑。 – akirk