2016-11-28 150 views
0

我正在PHP中開發我的第一個項目,並且是新的。昨天我需要創建一個功能,向所有網站成員發送新帖子的電子郵件通知。我創建了一個功能,我不知道它有多好。如何使用PHP發送批量電子郵件?

創建一個帖子後,我選擇了所有的網站成員在SQL -

包括 「db.php中」;

$query = "SELECT * FROM user"; 
$runQuery = mysqli_query($db, $query); 

這給了我所有的網站會員。然後,我通過數組循環,抓住了這樣每個成員的電子郵件ID -

while($users = mysqli_fetch_assoc($runQuery) { 
    $email = $users['email']; 
} 

這樣,我有每個成員的電子郵件ID。現在在循環中,我可以使用mail()函數向每個站點成員發送電子郵件。

爲了更好的編寫代碼,我編寫了在另一個文檔中發送電子郵件代碼並使用'include()'函數將其鏈接起來。這樣的 -

while($users = mysqli_fetch_assoc($runQuery) { 
    $email = $users['email']; 

include "send_email.php"; 
} 

在哪裏發送電子郵件文件$標題,$ EMAIL_SUBJECT,$ EMAIL_BODY並且從這個循環來的$電子郵件。因此,每次循環運行時,都會有新的電子郵件ID,並且郵件將發送到該電子郵件ID。

這段代碼在我的本地主機上工作,甚至在生產(hostgator託管),直到有幾個網站成員。但是,當我在我的現場網站(擁有超過70個成員)上測試它時,頁面停頓至少10秒鐘,並返回錯誤「頁面無法正常工作」。

那麼這裏究竟發生了什麼?爲什麼不能發送電子郵件給更多的用戶?

+0

是在實時服務器上的PHP郵件設置?而沒有看到服務器日誌非常難以調試。儘管如此,包括這樣的文件當然不是「更好的代碼編寫」。更好的辦法是構建一個郵件類並使用它。 – DevDonkey

+0

是的PHP郵件設置。我告訴過你它已經成功地向一些會員發送了電子郵件,但是當我通過70多個用戶打電話時,它失敗了。 – Sandy

回答

0

由於您每步都包含「send_mail.php」文件,這意味着很多內存和CPU使用率。那麼,爲什麼你不去做這樣的:

send_mail.php文件:

function sendMail($email){ 
    //your mail stuff.. 
} 

while循環:

include "send_mail.php"; 
while($users = mysqli_fetch_assoc($runQuery)){ 
    $email = $users['email']; 
    sendMail($email); 
} 

而且PHP腳本有執行代碼的時間限制。如果你想繞過它,你必須寫這個代碼到你的文件的頂部(即while循環):

set_time_limit(0); 
+0

謝謝你的回覆。在send_mail.php中,我有$ header,$ email_subject,$ email_body,$ email和mail()終於發送郵件。所以將相同的代碼作爲功能爲我做的工作。 而我會嘗試set_time_limit(0)。還有一個問題,我應該輸入多少分鐘或幾秒鐘。 – Sandy

+0

是的,它會先生。 –

+0

好的。我正在嘗試。請告訴我,如果這可以將時間限制增加到1分鐘? – Sandy