當我知道我的cPanel主機我能管的電子郵件收件箱中的腳本,但我想要做的是:提取附件管道郵件到PHP
- 發送到[email protected]
- 管mail.php
- mail.php讀取主題,一個.txt附件
- 主題和.txt附件的內容存儲在數據庫中
是有一種方法可以直接使用PHP來做到這一點嗎?
當我知道我的cPanel主機我能管的電子郵件收件箱中的腳本,但我想要做的是:提取附件管道郵件到PHP
是有一種方法可以直接使用PHP來做到這一點嗎?
您可能需要執行以下操作:
寫一個PHP腳本的可執行文件的CLI(通過在指向PHP程序的腳本的頂部添加#聲明,然後設置其可執行權限)。
讓這個腳本從PHP讀取原始郵件://標準輸入(的file_get_contents是最容易)
讓這個腳本中的部分,郵件解碼使用像PEAR ::郵件::啞劇::解碼或我認爲有一個方便的Zend框架組件)。
閱讀來自所述經解碼消息的附件和主題,並且存儲爲正常
出口(0)在端告訴CLI,這是一個乾淨出口 - 任何其它出口()狀態可能導致反彈的電子郵件。
存在一個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。
謝謝!我是新的可執行文件,所以需要看看它,你知道任何可能對我有用的鏈接:) – tarnfeld