2016-08-29 60 views
3

我正在使用PHPMailer庫來處理從我的應用程序中發送的電子郵件。PHPMailer-我應該在運行時發送郵件,還是通過cron作業?

問題是,當某些電子郵件被觸發發送(例如,當聯繫表格被提交,新用戶註冊等)時,頁面可能需要1-3秒才能加載,而電子郵件正在發送。如果郵件發送出現問題,延遲可能會更多。

我在考慮保存任何需要發送到我的數據庫中的pending_emails表中的電子郵件,然後每分鐘發一個cron作業發送出所有這些郵件,然後將它們從表中刪除。

我的問題是,這似乎是一個合乎邏輯的事情嗎?是否有任何潛在的資源問題,我應該每分鐘運行一次cron作業,然後在運行時發送電子郵件? (我需要經常運行cron作業,因爲有人可能正在等待緊急消息,例如「重置密碼」電子郵件)

+0

備選上述選項創建一個郵件腳本,您可以從命令行調用,然後運行'exec('script> pipe output ot stop blocking');'您的主腳本將會立即繼續,但對於錯誤處理來說不是很好。我稱之爲窮人多線程 – nogad

回答

0

這是一個非常基於觀點的問題,所以你會得到很多不同的,相互矛盾的答案,因爲有些人可能會告訴你可以讓用戶等待1-3秒,因爲它不那麼長,但是我傾向於不同意這一點。但是,我通常會做的是使用Queue

There are ways to create a queue WITHOUT using 3rd party software,但也有一些很好的工具,如RabbitMQ,Iron.ioBeanstalkd這可以非常有助於在後臺執行任務。這些服務會將您的任務推送到隊列中,隊列中的這些項目會在背景中及時處理,但用戶幾乎可以立即得到響應(取決於您正在做什麼)。這是我通常在後臺處理更多資源密集型任務的方式,例如發送電子郵件,以避免阻止對用戶的響應。

祝你好運。

-1

調查線程(PHP Threading)。我建議你創建一個調用發送電子郵件的新線程。這樣,您可以在不等待電子郵件發送的情況下向用戶返回響應,並且電子郵件發送進程將在另一個線程中並行運行。

1

你已經得到了一切。

在運行時發送,就在您響應用戶的HTTP請求時,最容易做到。但是,當然,這個反應會減慢一點。這也不是在小應用程序中不好,因爲發送電子郵件比人們想象的要快。它絕對有效。

實現消息隊列當然是更優雅和可擴展的方法。但是它需要更多的工作。您使用pending_emails數據庫表的想法完全有效。有這樣的隊列的庫和組件,但你不必使用它們。

相關問題