2011-09-07 18 views
0

我想知道是否有辦法運行PHP循環以便在後臺向訂閱者發送幾百封電子郵件。我的目標是格式化通訊,點擊發送,然後關閉瀏覽器或更改頁面。當然,發送電子郵件的實際過程將在後臺運行,並且不會因瀏覽器關閉而中斷。在無cron的背景下發送郵件

我知道這可以通過從MySQL或文本文件中保存的隊列中讀取一個cron作業來完成,但這樣,即使長時間沒有隊列,cron也會一直運行,尋找隊列...

我在一個名爲Pommo(https://github.com/soonick/poMMo)的腳本中看到過這種funcionality,但似乎無法理解它是如何完成的。

有沒有人有這個想法?

回答

0

我打算爲您的問題添加評論,但他們沒有足夠的空間格式化並給出示例。

這裏有一個想法,我認爲可能的工作:

1 - 加載所有要發送到數據庫或文件的電子郵件。

2 - 從您的web應用程序點擊按鈕發送電子郵件。這會向服務器提交一個Ajax請求。您可以定義您想要在特定時間範圍內發送的電子郵件數量。請記住,大多數主機對每小時發送的電子郵件數量都有限制。

3 - 創建一個php腳本,它將接收Ajax請求併發送您定義的參數中的所有電子郵件。

4 - 我相信你可以殺死你的網頁瀏覽器,因爲PHP腳本會遍歷整個列表,直到它完成發送所有郵件纔會返回。

以上可能工作,但我永遠不會這樣做。如上所述,我會使用cronjob。你的cronjob只需要檢查是否有電子郵件發送。這不是資源密集型的。

如果您決定實施上述想法,請確保您通知我們。我很好奇這是否會奏效。

祝你好運!

+0

我認爲這將工作,如果PHP腳本有像ignore_user_abort(true)的東西,否則它會在瀏覽器關閉時被殺死,對吧? – fana

+0

@fana - 來自PHP手冊 - 「您可以決定是否希望客戶端斷開連接,導致腳本中止。」你可以在這裏閱讀完整的東西 - > http://php.net/manual/en/features.connection-handling.php – jdias

+0

在該頁面的評論中有一些非常有趣的代碼段。我必須嘗試一下。 – fana

0

我知道這可以用cron作業從保存在 MySQL或文本文件中讀取隊列進行,但這樣一來,即使有很長一段 期間沒有排隊,cron的永遠是運行,尋找隊列...

這幾乎擊敗了克朗的目的。您應該創建一個每15分鐘運行一次的作業,並檢查隊列中是否需要發送郵件。如果沒有郵件,讓腳本死掉,它會在15分鐘後再次運行。

如果有郵件需要發送,請在開始發送之前更新這些行以表明您正在處理它們,因此運行時間超過15分鐘不會導致其他腳本實例發送相同的郵件。

+0

我想你是對的。我只是不想在每次安裝時創建cron作業,因爲我正在考慮將此係統添加到自定義CSM中......我還希望它立即啓動該過程,並且有可能需要等待X分鐘才能啓動該過程開始... – fana

0

您需要一個隊列系統。有例如Beanstalkd適用於Linux,您可以使用php提供的東西。

+0

這真的很好,但在我看來,它需要通過命令行或一些Django界面運行。我需要它通過網絡界面觸發。 – fana

+0

你需要在「php界面」中觸發它 – pduersteler