2012-08-22 80 views
2

自從兩個月前我已經遇到了這個問題,並且仍在與之交往。 我爲我的郵件列表程序使用PHPMailer。我有一個cron工作在某些時候運行。但是,電子郵件存在問題。如果刷新頁面,PHPmailer會發送重複的內容

我使用PHPMailer的在一個循環,我向所有的郵件列表的成員。該代碼是這樣的:

<?php 
require("PHPMailer/class.phpmailer.php"); 
$mail = new PHPMailer(); 
$mail->SingleTo = true; 
$mail->CharSet = "UTF-8"; 
$mail->Subject = "Our news"; 
$r_receivers = array("John"=>"[email protected]","Mary"=>"[email protected]","Rob"=>"[email protected]"); 

foreach($r_receivers as $name=>$email){ 
    $mail->SetFrom('[email protected]', "Oursite"); 
    $mail->MsgHTML($sendContent); 
    $mail->AddAddress($email, $name); 
     $sendContent = "<p>E-mail body</p>"; 
    if($mail->Send()) 
     echo "Sent to: ".$email."<br/>"; 
    else 
     echo "Not sent to: ".$email.", reason: ".$mail->ErrorInfo."<br/>"; 
    $mail->ClearAddresses(); 
}?> 

當我打電話與AJAX這個代碼,它可以完美運行。但是,如果我在瀏覽器中執行此代碼或刷新它或使用cron作業調用它,它會向我發送重複項。

有人能解釋我爲什麼會去錯了,當我用瀏覽器中打開/刷新?爲什麼我用ajax調用它並從瀏覽器調用它會得到不同的結果?

+0

當您重新加載網頁時,您執行一個新的請求。所以代碼再次執行,郵件將被髮送出去。考慮檢查上次發送操作的時間和IP,直到一段時間纔會執行。 – thedom

+0

你的意思是說,當你在瀏覽器中加載它時,你會收到多個電子郵件? – andrewsi

+0

是的,當我在瀏覽器中加載此文件時,我收到多個電子郵件。 – ayok

回答

0

您正在使用SingleTo,不鼓勵。根據PHPMailer庫的作者,SingleTo計劃在PHPMailer 6.0的發行版中被棄用,並在7.0中被刪除。作者解釋說,最好控制發送給更高級別的多個收件人,因爲PHPMailer不是郵件列表發件人。他們告訴我們也應該不要使用PHP mail()函數,因爲安全使用非常困難; SMTP更快,更安全,並提供更多的控制和反饋。由於SMTP與SingleTo不兼容,PHPMailer的作者將刪除SingleTo而不是SMTP。