我剛寫了一套批量郵件類,用於處理大量電子郵件並根據傳遞的參數解析其內容。如果我測試1000個隨機收件人和我的數據庫中的1000個隨機發件人的電子郵件,直到腳本點擊send()部分(我現在評論它),我的性能大約爲2秒,而峯值內存爲20 MB ,這很棒。PHP,sendmail和傳輸 - 如何加快郵件發送
但是,如果我取消註釋發送部分,則發送需要30秒。這是不可接受的,我想以某種方式加快速度。從測試中可以明顯看出,延遲是由$ mail-> send()調用引起的,就好像它正在等待它返回一些內容,然後繼續循環併發送下一封電子郵件。
我想知道的是:如何加快send()調用?我能做些什麼來使其更快?我試着使用兩種通知方法:
- Zend的SMTP傳輸,連接到服務器直接發送剛。這需要每1000封電子郵件30秒。
- Sendmail via Zend_Mail。準備好每封電子郵件後,只需調用Zend_Mail的發送功能。這需要60秒。
請注意,排隊絕對是一種選擇,我已經將它構建到我的課程中。它只需要激活一個cron,它就像一個魅力。但我想知道實際的發送和如何加快速度。所以,實際的send()調用。
糾正我,如果我錯了,但一個好的MySQL查詢將總是勝過一個文件閱讀。排隊機制已經完成,現在不需要改進。同樣,我們的電子郵件都有不同的內容。因此,當我們在2秒內發送1000封電子郵件時,每個人都有不同的收件人,不同的發件人和不同的內容。我相信你在這裏顯示的這個方面只能用於批量郵件發送,對嗎?所有消息中的內容是否相同?如果沒有,問題仍然存在 - 這可能比在數據庫中排隊更快嗎?我很懷疑。 – Swader
我以爲問題是發送不生成! :)可能會有一些優化的郵件服務器,這將能夠批量加載消息的gazzilions。任何情況 - 這將比PHP的sendmail方法更快。直接服務器訪問應該比php多出許多倍(例如,它可以使用持久連接)。 –
嗯,很對。準備好的電子郵件可以很容易地以eml格式保存到磁盤中,然後從腳本開始接管。這也可以作爲替代隊列體面地服務。你有沒有以有效的方式完成這個任務的例子?我很想看看一些。 – Swader