你好,我的 php 中有一段是需要寄送 email 給公司的客戶名單中的電子郵件信箱。
但是因為這些客戶名單的電子郵件信箱是用人工輸入,輸入的人經常會將email信箱的網域輸入錯誤,
於是在 php 中寄送信件到這些網域錯誤的信箱的時候就會出現以下錯誤訊息:
"maximum execution time of 30 seconds exceeded"
這時候就算多少客戶信箱沒寄送,程式都會中止了;接下來又要人工去查是那些 email 的網域錯誤。然後重新發送信件,造成很大的麻煩與困擾。
這個問題沒辦法用 try{}catch(){} 來解決,程式還是會出現一樣的錯誤訊息。
也不能把 set_time_limit() 設定成 0 來解決 ,這樣程式就會一直卡在這一筆錯誤的信箱。
曾經試過先用 php 確認網域是否有效,但是找不到相關的函式可用。
我是用 PhpMailer 來寄信的。
php 的版本是 Php 5。
有人知道該如何解決嗎?
我自己在使用 php 推 mail 的時候,我都只把 mail 推給本機的 smtp server,
再由本機的 smtp server Relay 出去,
(或者有一台專門負責 smtp relay 的server )
php 這頭只管檢查 email Addr. 格式合不合理,
至於email Addr. 有沒有效,就丟給 smtp server 去處理,
事後再去smtp server上去 parse log 就好了,
(也可以搭配 procmail 之類的去針對 smtp relay server 的退信去做自動化報表之類的處理)
收件人不要放在 $mail->AddAddress();
放到 $mail->AddBCC();
這樣客戶的 email 也不會外洩
輸入錯的 email 或失效的 email 應該會退回給寄件人