2010-10-19 93 views
2

所以我想弄清楚如何發送電子郵件到一個地址,例如[email protected],而不是電子郵件去那裏它會被髮送或轉發給我創建的腳本來讀取電子郵件的內容並將內容存儲到數據庫中。任何關於如何在PHP中執行的建議?處理傳入的電子郵件與PHP腳本

謝謝!

+0

這取決於你的服務器有什麼MTA,如果它接受電子郵件。通常,雖然你將電子郵件傳送給你的腳本。腳本本身只是從STDIN讀取。 – Cfreak 2010-10-19 18:29:57

回答

7

下面是一些代碼,你可以用它來讓你去:

// set user to check 
$strUser  = "username"; 
$strPassword = "password"; 

// open 
$hMail = imap_open ("{mail.yourdomain.com:143/notls}INBOX", "$strUser", "$strPassword"); 

// get headers 
$aHeaders = imap_headers($hMail); 

// get message count 
$objMail = imap_mailboxmsginfo($hMail); 

// process messages 
for($idxMsg = 1; $idxMsg <= $objMail->Nmsgs; $idxMsg++ ) 
{ 
    // get header info 
    $objHeader = imap_headerinfo($hMail, $idxMsg); 

    // get from object array 
    $aFrom = $objHeader->from; 

    // process headers 
    for($idx = 0; $idx < count($aFrom); $idx++) 
    { 
     // get object 
     $objData = $aFrom[ $idx ]; 

     // get email from 
     $strEmailFrom = $objData->mailbox . "@" . $objData->host; 

     // do some stuff here 
    } 

    // delete message 
    imap_delete($hMail, $idxMsg); 
} 

// expunge deleted messages 
imap_expunge($hMail); 

// close 
imap_close($hMail); 
+0

謝謝!我應該能夠弄清楚如何拉出身體,這似乎並不難。我發現這一點,我認爲是正確的: echo imap_body($ aFrom,$ idx);並且會在循環中讀取正文並顯示給每個消息 – Bill 2010-10-19 20:04:17

+0

祝您好運! – 2010-10-19 21:01:16

+0

我也意識到,我有權訪問shell。我從來沒有做過任何事情,但是我可以將上面的代碼放在那裏,並告訴代碼每隔幾秒運行一次? – Bill 2010-10-22 14:52:58

2

兩個選項:

1)如果你有機會到收件人的電子郵件服務器上的外殼,你可以設置一個規則,通過每當收到新的消息的procmail等)以觸發腳本(如。

2)您可以允許電子郵件正常放入郵箱,然後編寫您的PHP腳本通過IMAP訪問郵箱,取出新郵件,處理它們,然後刪除它們。然後每隔幾分鐘由cron運行一次。

+0

由於我不熟悉shell /如何設置規則,第二個選項可能更加可行。我希望這是非常實時的,所以如果我設置了IMAP,它必須每分鐘完成一次。我不確定服務器上會有多大的壓力。關於在哪裏可以找到如何編寫PHP腳本通過IMAP訪問郵箱的教程的任何建議? – Bill 2010-10-19 18:53:20