Отправка 2 сообщений электронной почты с ошибкой PHP

Я довольно озадачен этим.

//SMTP servers details $mail->IsSMTP(); $mail->Host = "mail.hostserver.com"; $mail->SMTPAuth = false; $mail->Username = $myEmail; // SMTP usr $mail->Password = "****"; // SMTP pass $mail->SMTPKeepAlive = true; $mail->From = $patrickEmail; $mail->FromName = "***"; $mail->AddAddress($email, $firstName . " " . $lastName); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = $client_subject; $mail->Body = $client_msg; if($mail->Send()) { $mail->ClearAllRecipients(); $mail->ClearReplyTos(); $mail->ClearCustomHeaders(); ... $mail->From = "DO_NOT_REPLY@..."; $mail->FromName = "****"; $mail->AddAddress($ToEmail1, "***"); //To: (recipients). $mail->AddAddress($ToEmail2, "***"); //To: (recipients). $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = $notification_subject; $mail->Body = $notification_msg; if($mail->Send()) { ... 

Первое письмо отправлено штрафом. Второй – нет. Что может быть причиной такого поведения? Я пропустил какой-то сброс?


Обновление: использование другого почтового сервера, похоже, работает, поэтому, по-видимому, это настройка определенного почтового сервера, вызывающая проблемы. Любая идея, что это может быть?

Некоторые поставщики налагают ограничения на количество сообщений, которые могут быть отправлены в течение определенного периода времени. Чтобы определить, зависит ли ваша проблема от лимита скорости передачи данных, вы должны попытаться добавить паузу после первой отправки. Например:

 if ($mail->Send()) { sleep(10); // Seconds ... if ($mail->Send()) { ... } } 

Затем, постепенно понижая время сна, вы должны быть в состоянии определить, каков предел скорости.

IMHO вам нужно создать новый объект PHPMailer для каждого отправленного сообщения. Если вы хотите поделиться некоторыми обычными настройками, используйте что-то вроде этого:

 $mail = new PHPMailer(); /* Configure common settings */ while ($row = mysql_fetch_array ($result)) { $mail2 = clone $mail; $mail2->MsgHTML("Dear ".$row["fname"].",<br>".$cbody); $mail2->AddAddress($row["email"], $row["fname"]); $mail2->send(); } 

Попробуйте следующее: как @Felipe Alameda. Упомянутый Remove $mail->SMTPKeepAlive = true;

 // for every mail if(!$mail->Send()) { echo 'There was a problem sending this mail!'; } else { echo 'Mail sent!'; } $mail->SmtpClose(); 

Я думаю, что ваша проблема – $mail->SMTPAuth = false;

Трудно поверить, что есть провайдеры ISP или SMTP, которые не требуют аутентификации, даже если они бесплатны.

Вы можете попробовать это, чтобы проверить наличие ошибок вместо или в дополнение к проверке для send() true:

  if ( $mail->IsError() ) { // echo ERROR; } else { echo NO ERRORS; } //Try adding this too, for debugging: $mail->SMTPDebug = 2; // enables SMTP debug information 

Все остальное в вашем коде выглядит отлично. Мы много используем PHPMailer и никогда не испытывали никаких проблем с этим

Ключ может лежать в тех частях, которые вы пропустили. Является ли домен отправителя обоих писем одинаковым? В противном случае узел SMTP может видеть это как попытку реле. Если у вас есть доступ к журналам сервера SMTP, проверьте их; они могут предложить ключ.

Кроме того, проверьте, что $mail->ErrorInfo говорит … он может сказать вам, в чем проблема.

я лично попытаюсь сделать небольшие шаги, такие как отправка одного и того же письма .. так что просто очистите получателей и попробуйте отправить идентичную электронную почту (этот код работает для меня). Если этот код проходит, вы можете продолжить добавлять предыдущие строки и отлаживать там, где это происходит

и, возможно, $mail->ClearCustomHeaders(); делать проблемы

 //SMTP servers details $mail->IsSMTP(); $mail->Host = "mail.hostserver.com"; $mail->SMTPAuth = false; $mail->Username = $myEmail; // SMTP usr $mail->Password = "****"; // SMTP pass $mail->SMTPKeepAlive = true; $mail->From = $patrickEmail; $mail->FromName = "***"; $mail->AddAddress($email, $firstName . " " . $lastName); $mail->WordWrap = 50; $mail->IsHTML(true); $mail->Subject = $client_subject; $mail->Body = $client_msg; // all above is copied if($mail->Send()) { sleep(5); $mail->ClearAllRecipients(); $mail->AddAddress('another@email.com'); //some another email } ... 

Попробуйте в следующем примере.

 <?php //error_reporting(E_ALL); error_reporting(E_STRICT); date_default_timezone_set('America/Toronto'); require_once('../class.phpmailer.php'); //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer(); $body = file_get_contents('contents.html'); $body = eregi_replace("[\]",'',$body); $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = "mail.yourdomain.com"; // SMTP server $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) // 1 = errors and messages // 2 = messages only $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "mail.yourdomain.com"; // sets the SMTP server $mail->Port = 26; // set the SMTP port for the GMAIL server $mail->Username = "yourname@yourdomain"; // SMTP account username $mail->Password = "yourpassword"; // SMTP account password $mail->SetFrom('name@yourdomain.com', 'First Last'); $mail->AddReplyTo("name@yourdomain.com","First Last"); $mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication"; $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test $mail->MsgHTML($body); $address1 = "whoto@otherdomain.com"; $address2 = "whoto@otherdomain.com"; $mail->AddAddress($address1, "John Doe"); $mail->AddAddress($address2, "John Peter"); $mail->AddAttachment("images/phpmailer.gif"); // attachment if any $mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if any if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } ?> 

Примечание. Лучше вы можете создать многопользовательскую электронную почту и указать ее как ARRAY, например

 <?php $recipients = array( 'person1@domain.com' => 'Person One', 'person2@domain.com' => 'Person Two', // .. ); foreach($recipients as $email => $name) { $mail->AddCC($email, $name); } (or) foreach($recipients as $email => $name) { $mail->AddAddress($email, $name); } ?> 

Я думаю, это может помочь вам решить вашу проблему.

Я думаю, у вас здесь проблемы с организацией.

Я рекомендую:

  1. Задайте свои настройки (SMTP, пользователь, пароль)
  2. Создайте новый объект электронной почты с информацией из массива, содержащего сообщения и адреса
  3. Отправить электронное письмо
  4. Перейти к шагу 2