2011-12-30 19 views
1

我正在使用php腳本發送一封電子郵件,我想在一段時間後發送郵件。我將爲此使用sleep()。但是,我會在哪裏推遲發送電子郵件?這裏是我的代碼:如何使用睡眠延遲PHP電子郵件

<?php  
if(isset($_POST['email'])) 
{ 

$headers = "From: Memory Jet <[email protected]>\r\n"; 


$to_visitor = $_POST["email"]; 
$common_data = $_POST["message"]; 
//I originally put the delay here, it didn't work 
mail($to_visitor, "Your Memory", $common_data, $headers); 

} ?> 

在此先感謝! =)-Ben

+0

把它放在'mail()'函數之前,它會睡覺。 – 2011-12-30 20:22:03

+0

我會再試一次 – 2011-12-30 20:23:40

回答

4

兩個問題:1)你說的「它不工作」的意思;它做了什麼? 2)爲什麼在發送郵件之前要等很長時間?

另外,我會強烈建議不要調用PHP腳本sleep(),因爲它會延遲腳本完成,因此,在HTML瀏覽器。

我會實現一個更強大的電子郵件排隊系統。基本上,不是在腳本中發送電子郵件,而是在數據庫中插入一行,其中包含要發送的電子郵件隊列。然後,您會有一個cron或其他後臺進程,它會定期檢查數據庫以查找要發送的電子郵件,然後批量發送它們。

此外,你可以指定一個表中的「待發送時間」,並且發件人腳本不會發送任何電子郵件,直到當前的時間是「待發送時間」之後。

睡眠()荷蘭國際集團的問題是,PHP腳本會調用,執行,然後走了。爲了在相對遙遠的未來做些事情,你需要其他的東西cron只是一個例子。你可以在Windows任務調度器中使用某些東西(你沒有提到目標平臺),或者編寫你自己的程序。用C語言(或者甚至PHP)不斷地運行,檢查數據庫和發送電子郵件,這並不是一個很大的工作。

+0

腳本沒有加載。我也來試試吧,我再次認爲這是一個錯誤 – 2011-12-30 20:24:41

+0

http://www.kirupa.com/forum/showthread.php?301942-Insert-time-delay-into-mail-sending – DGund 2011-12-30 20:25:46

+1

@DevinGund啊,模仿真實的人的延遲。這是有道理的:-) – 2011-12-30 20:28:01

0

我使用PHP腳本來發送,我想時間延遲後發送電子郵件。我將爲此使用sleep()。

不要。如果您在用戶觸發的腳本中執行此操作,則會延遲用戶的最終頁面呈現,直到完成睡眠呼叫。它也會在整個時間內綁定一個Apache服務器工作者。如果你有很重的負載和10秒的延遲,你可以結束自己的互聯網。另外,如果用戶在延遲結束之前關閉頁面,則電子郵件將永遠不會被髮送。

使用cron或者守護進程來做到這一點。

+0

不是真的!腳本在用戶關閉頁面後繼續運行! – Alexxus 2013-08-29 11:12:08

+0

@Alexxus一般來說,沒有。 http://php.net/manual/en/function.ignore-user-abort.php – ceejayoz 2013-08-29 13:46:25

+0

垃圾!你是對的!對不起!我以爲它是默認開啓的.. – Alexxus 2013-08-29 14:16:32