2012-08-22 3 views
2

2 달 전부터이 문제가 발생하여 여전히이 문제가 있습니다. 내 메일 링리스트 프로그램에 PHPMailer를 사용하고 있습니다. 그리고 나는 특정 시간에 달리는 크론 직업을 가지고있다. 그러나 이메일에 문제가 있습니다.페이지가 새로 고쳐지면 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(); 
}?> 

이 코드를 아약스로 호출하면 완벽하게 작동합니다. 그러나 브라우저에서이 코드를 실행하거나 새로 고치거나 cron 작업으로 호출하면 사본이 나에게 전송됩니다.

누군가 브라우저/새로 고침을 열 때 왜 잘못 될지 설명 할 수 있습니까? 왜 내가 아약스로 부르고 브라우저에서 불러서 다른 결과를 얻었 을까?

+0

웹 페이지를 다시로드하면 새 요청을 실행합니다. 그래서 코드가 다시 실행되고 메일이 발송됩니다. 이전 send 액션에서 시간과 ip를 확인하고 잠시 시간이 지날 때까지 실행되지 않도록하십시오. – thedom

+0

브라우저에 이것을로드 할 때 둘 이상의 전자 메일이 전송된다는 의미입니까? – andrewsi

+0

예, 브라우저에서이 파일을로드하면 둘 이상의 이메일을 수신합니다. – ayok

답변

0

당신은 사용하지 않는 SingleTo를 사용하고 있습니다. PHPMailer 라이브러리 작성자에 따르면 SingleTo는 PHPMailer 6.0 릴리스에서 더 이상 사용되지 않으며 7.0에서 제거 될 예정입니다. 필자는 PHPMailer가 메일 링리스트 발신자가 아니기 때문에 더 높은 수준의 여러 수신자에게 보내는 것을 제어하는 ​​것이 더 낫다고 설명했습니다. 그들은 PHP mail() 함수를 사용하는 것을 권장하지 않습니다. 왜냐하면 안전하게 사용하기가 극히 어렵 기 때문입니다. SMTP는 빠르고 안전하며 더 많은 제어 및 피드백을 제공합니다. SMTP가 SingleTo와 호환되지 않기 때문에 PHPMailer 작성자는 SMTP가 아닌 SingleTo를 제거합니다.

관련 문제