2011-02-24 145 views
2

我正在改進使用mail()循環遍歷所有訂閱者的PHP郵件列表代碼。用於顯示「超過30秒的最大執行時間」錯誤的腳本通過添加set_time_limit(0);解決。BCC是否將PHP郵件()發送到郵件列表的方式與TO不同?

現在沒有錯誤,但發送100條消息花了大約7分鐘。我有什麼選擇?

只會向BCC幫助中的所有訂閱者發送一條消息,還是與「幕後」相同?

+1

PHP可能是用於羣發郵件應用程序的錯誤工具。 – Spudley 2011-02-24 13:13:35

+1

更好地使用cron作業來發送php郵件羣發郵件 – 2011-02-24 13:17:34

回答

1

發送到所有的BCC將是一個很多更快。代碼將執行得更快,並且mail()將只執行一次。

這是速戰速決,但如前所述,大BCC列表是一個安全的道路到垃圾郵件文件夾。但是,使用mail()也是垃圾郵件的一個肯定目標。

如果你想在X電子郵件批次使用cron的一次真正改善它,使用PHPMailer from SourceForge並通過SMTP發送(垃圾郵件少命中)。

的PHP文檔狀態:

注:
值得一提的是,mail()功能不適合在一個循環的電子郵件的卷。此功能爲每封電子郵件打開和關閉SMTP套接字,效率不高。

要發送大量電子郵件,請參閱» PEAR::Mail» PEAR::Mail_Queue包。

+0

在使用「郵件( )'和「通過SMTP的phpMailer」?郵件()最終是否使用相同的SMTP? :) – binaryLV 2011-02-24 13:30:27

+0

不一定*相同* smtp。通常郵件使用本地郵件服務器,除非您可以訪問php.ini並更改它。與一個圖書館,如梨或phpmailer你可以使用例如谷歌的smtp。它不是關於協議,而是因爲本地未知服務器被垃圾郵件過濾器視爲不安全。 – 2011-02-24 13:58:24

+0

@binaryLV:phpMailer知道正確的SMTP標頭用於「看起來像」真正的電子郵件,而有人用'mail()'手工製作郵件並且沒有特別的專業知識將最終生成一個相當簡單的電子郵件,電子郵件,垃圾郵件過濾器將分開。事實上,這種垃圾郵件過濾器主要是針對這種情況而設計的,因爲有人正在做一個快速,簡單,便宜的羣發郵件。 – 2012-10-28 13:04:30

0

既然你根本要求的選擇,這裏有幾個:

  • 分析代碼,看看爲什麼其緩慢。也許你可以解決一些效率問題。
  • 依靠mail()函數通常是不可取的,特別是因爲更好的選擇,如swiftmail或Zend_mail存在。雖然這些對於小郵寄要求可能是矯枉過正的
  • 它可能是服務器相關的問題?也許與你的服務器管理員交談。
1

發送給所有訂閱者,方法是在BCC中更快地指定它們。儘管對於一些私人環境來說這可能是一個不錯的選擇,但我不會建議在公共網頁/系統中這樣做,因爲許多人可能會認爲這樣的電子郵件是垃圾郵件。

一種選擇是通過cron作業發送電子郵件。在這種情況下,只要所有電子郵件最終被髮送,發送電子郵件所花費的時間並不重要。

+0

它可以更快速地工作......更快。包含500個電子郵件地址和單個電子郵件正文的一個請求比500個請求要快得多 - 包含完整的電子郵件 - 包含1. – 2011-02-24 13:22:59

0

定時任務是更好的主意。我用這個,它的工作原理... 你的代碼配置文件將幫助你找出問題。

0

我不推薦通過BCC發送郵件,因爲這將是快了很多。你的腳本只需要建立一個連接到SMTP服務器,這個服務器將爲你完成剩下的工作。

我還會看看例如PHPMailer或PEAR :: Mail。 羣發郵件的mail()方法的壞處是它會爲每個發送的電子郵件打開一個SMTP服務器的新套接字。 一個好的郵件庫會創建一個到SMTP服務器的套接字連接,然後發送所有郵件並在最後關閉它。

加快它多一點,你也可以看看你的SMTP服務器配置(如果可能),並嘗試提高守護進程等 您也可能想考慮一些SMTP服務器有最大值,您可以發送。