iT邦幫忙

0

關於 php 執行寄送電子郵件超時的問題

你好,我的 php 中有一段是需要寄送 email 給公司的客戶名單中的電子郵件信箱。
但是因為這些客戶名單的電子郵件信箱是用人工輸入,輸入的人經常會將email信箱的網域輸入錯誤,
於是在 php 中寄送信件到這些網域錯誤的信箱的時候就會出現以下錯誤訊息:
"maximum execution time of 30 seconds exceeded"
這時候就算多少客戶信箱沒寄送,程式都會中止了;接下來又要人工去查是那些 email 的網域錯誤。然後重新發送信件,造成很大的麻煩與困擾。
這個問題沒辦法用 try{}catch(){} 來解決,程式還是會出現一樣的錯誤訊息。
也不能把 set_time_limit() 設定成 0 來解決 ,這樣程式就會一直卡在這一筆錯誤的信箱。
曾經試過先用 php 確認網域是否有效,但是找不到相關的函式可用。
我是用 PhpMailer 來寄信的。
php 的版本是 Php 5。
有人知道該如何解決嗎?

andyto202 iT邦研究生 4 級 ‧ 2014-05-26 09:54:03 檢舉
你所謂的錯誤
是指
例如
com 寫成 net 之類的嗎
還是寫錯字

@後面的資料建一個資料庫
在寄之前去比對
如果不一樣就不要寄
就不會逾時了
a2zsys iT邦新手 5 級 ‧ 2014-05-28 03:33:53 檢舉
時間連接..time out..在主機的 server 上..但我不知你的主機..是哪種..故無法回答...去問幫你裝主機的...或..你的E-mail用hotmail結合後..用hotmail去發送..就沒問題了

2 個回答

2
qooqoo1127
iT邦新手 3 級 ‧ 2014-05-26 10:41:25
最佳解答

我自己在使用 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 的退信去做自動化報表之類的處理)

0
rogeryao
iT邦新手 2 級 ‧ 2014-05-29 17:27:42

收件人不要放在 $mail->AddAddress();
放到 $mail->AddBCC();
這樣客戶的 email 也不會外洩

輸入錯的 email 或失效的 email 應該會退回給寄件人

我要發表回答

立即登入回答