2017-08-15 51 views
3

我有一個使用Slim路由框架構建的PHP應用程序。該應用程序需要發送來自訂單的動態電子郵件,以便用戶可以對這些電子郵件作出響應,並將響應直接回傳到應用程序(存儲在MySQL中)。我可以輕鬆地創建每個訂單的動態地址,並且很好。我的問題是恢復。給PHP應用程序管道電子郵件

我設置了一個子域(mailer.example.com),在cPanel中,我設置了一個轉發器來捕獲所有到該子域的郵件並將其轉發到特定的PHP文件。在PHP文件讀取標準輸入,並抓住了MIME消息,目前其寫入文件:

#!/usr/bin/php -q 
<?php 
// read from stdin 
$fd = fopen("php://stdin", "r"); 
$email = ""; 
while (!feof($fd)) 
{ 
    $email .= fread($fd, 1024); 
} 
fclose($fd); 

$filename = "mail_".date("mdYHis").rand(1,99999999); 
file_put_contents("mailfiles/".$filename, $email); 

header("Location: http://www.example.com/public/mailer/process/".$filename); 

正如你所看到的,最後我想轉發給我的實際應用程序,它具有所有的數據庫調用和其他例程來處理電子郵件。但我不知道如何將請求加入應用程序。它似乎忽略了上面的標題調用。

我在做這一切都是錯誤的,還是應該在這個腳本中完成所有需要的處理?我意識到這可能是最簡單的路徑,但我也試圖使用郵件解析庫,很適合我的應用程序。

不知道這一切是否合理。讓我知道你需要什麼其他信息。

+1

刪除位置之間的休息:和https:// –

+0

編輯這樣做。排成一行太長了。我在https中刪除了's'以使其適合。 –

+0

就像一個參考,如果你正在尋找一個輕量級,低依賴性mime庫,我結束了這一點,它的工作原理:https://packagist.org/packages/zbateson/mail-mime-parser –

回答

4

我認爲你要做的不是返回一個帶有Location頭的HTTP響應,而是向你的web服務器發起一個HTTP請求。

在這種情況下,你應該更換你的header()電話:

$ch = curl_init('http://localhost/public/mailer/process/' . $filename); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$result = curl_exec($ch); 

請注意,您的腳本(一個叫保存郵件內容)將等待您的應用程序處理完請求。如果這是你的問題,你需要使用一種技術來運行PHP processes in the background

+0

是的,這可能正是我所需要的。請求的處理應該只有1-2秒,所以我認爲這很好。今晚我會給你一個旋轉。謝謝。 –

+0

所以這似乎是做我所需要的。不幸的是,我的服務器沒有識別出我對php.ini的更改,以允許url_allow_fopen正常工作,因此我無法運行作曲者以在服務器上獲取郵件庫,因此我可以完全通過步調運行它。但至少這部分是功能性的。感謝那! –

0

你可以用php閱讀郵箱並解析郵件。

// To connect to a POP3 server on port 110 on the local server, use: 
$mbox = imap_open ("{localhost:110/pop3}INBOX", "user_id", "password"); 

我不會,創建自定義回覆郵件/郵箱,每個訂單,而不是爲了增加主題作爲參考。這樣你只需要解析一個郵箱。

找到IMAP功能here

相關問題