2011-02-28 104 views
0

我有一個系統發送大量的電子郵件報告(每天約有超過500封電子郵件)。我不是一個垃圾郵件發送者:)這不是一大堆的電子郵件,但他們發送循環,我經常得到這個錯誤「PHP警告:郵件():無法執行郵件傳遞程序」。我知道有這個問題的PEAR :: Mail_Queue包。但是,如果這個軟件包是真正有用的東西,或者我需要尋找其他東西,請讓我知道。非常感謝在循環中發送大量電子郵件

回答

0

你必須在郵件之間使用sleep(),這可以解決這個問題。

+0

感謝您的回答。但是,我擔心,這會增加腳本執行時間,不是嗎? – alagar 2011-02-28 13:27:48

+1

Heya隊友,它會爲你的執行增加一點時間,但它不會計入最大執行時間。因此,一天一次500封郵件,甚至5000封郵件都無關緊要。 – 2011-03-03 09:58:00

0

另一種方法也可以是直接通過SMTP服務器發送郵件。這節省了您通過「通過shell」調用sendmail(或使用任何MTA)來傳遞郵件的往返行程。例如,Zeta Mail component允許您直接通過SMTP服務器發送郵件,而不需要特殊擴展。

1

「PHP的警告:電子郵件():無法執行郵件傳遞計劃」

...含義正是它在錫說。 PHP只會將電子郵件轉移到Linux/Unix/POSIX系統上的外部程序(由php.ini中的sendmail_path定義)。並且在某些情況下返回錯誤。這不是PHP代碼中的錯誤。

除非你有一個非常糟糕的MTA配置,否則問題將不會通過使用SMTP連接來解決。

您需要查看MTA中的日誌,瞭解其無法發送郵件的原因 - 或者將郵件可執行文件封裝在日誌腳本中。

2

您可以使用PEAR's Mail_Queue package直接通過SMTP服務器發送郵件 - 也可以在後臺運行,因此不會延遲或增加腳本執行時間。

使用Mail_Queue包的另一個優點是,您可以檢索爲記錄目的而發送的每封郵件的esmtp ID - 我不知道這是否可以使用Zeta Mail組件或任何其他郵件組件。

我已經開發了一些面向公衆的和僅限於局域網的解決方案,它使用這個組件並且沒有任何重大問題。