2014-12-24 2 views
-1

У меня есть простая проблема, которая сводит меня с ума.Почта только отправляется один раз внутри php while loop

Просмотрите приведенный ниже код; Я по существу пытаюсь отправить массовую рассылку с адресами из базы данных.

Проблема в том, что отправляется только одно сообщение для первой записи. Я проверил (через счетчик и конкатенацию текста), что цикл проходит для каждой записи.

Что мне не хватает?

спасибо.

function SendMassMailing($Connection, $MailingID) { 

    $select_query = "SELECT `Drafts`.`SentMailingID`, `Drafts`.`FromAddress`, `Drafts`.`BCCFromAddress`, `Drafts`.`AdditionalBCC`, `Categories`.`MailingUserCategoryID`, `Drafts`.`Subject`,`Drafts`.`Message`, `Drafts`.`Notes`, `Drafts`.`DateCreated` 
         FROM `MailingDraftSent` AS `Drafts` 
         INNER JOIN `MailingUserCategories` AS `Categories` 
         ON `Drafts`.`MailingUserCategoryID` = `Categories`.`MailingUserCategoryID` 
         WHERE `Drafts`.`SentMailingID` = $MailingID ORDER BY `Drafts`.`DateCreated` DESC;"; 

    $select_result = mysqli_query($Connection, $select_query); 

    if (!$select_result) { 

     die(mysqli_error($select_result)); 

    } 

    $main_message_row = mysqli_fetch_array($select_result, MYSQLI_ASSOC); 

    $from = $main_message_row['FromAddress']; 

    $CategoryID = $main_message_row['MailingUserCategoryID']; 

    $subject = $main_message_row['Subject'];; 

    $headers = "From: ".$from." <" . $from . ">\r\n"; 
    $headers .= "Reply-To: ". $from . "\r\n"; 
    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 

    $message = $main_message_row['Message']; 

    mysqli_free_result($select_result); 

    $select_query = "SELECT `MailingUserCategoryID`, `UserCategoryQuery` FROM `MailingUserCategories` WHERE `MailingUserCategoryID` = $CategoryID;"; 

    $select_result = mysqli_query($Connection, $select_query); 

    if (!$select_result) { 

     die(mysqli_error($select_result)); 

    } 

    if (mysqli_num_rows($select_result) > 0) { 

     $query_row = mysqli_fetch_array($select_result, MYSQLI_ASSOC); 

     $query_to_run = $query_row['UserCategoryQuery']; 

     $query_to_run = UnsanitizeQuery($query_to_run); 

     mysqli_free_result($select_result); 

     $select_result = mysqli_query($Connection, $query_to_run); 

     if (!$select_result) { 

      die(mysqli_error($select_result)); 

     } 

     if (mysqli_num_rows($select_result) > 0) { 

      $MessageCount = 0; 

      $originalmessage = $message; 
      $originalsubject = $subject; 

      while ($person_message_row = mysqli_fetch_array($select_result, MYSQLI_ASSOC)) { 

       $message = str_replace("[[FullName]]", $person_message_row['FirstName']." ".$person_message_row['LastName'], $originalmessage); 
       $subject = str_replace("[[FullName]]", $person_message_row['FirstName']." ".$person_message_row['LastName'], $originalsubject); 
       $message = str_replace("[[FirstName]]", $person_message_row['FirstName'], $message); 
       $subject = str_replace("[[FirstName]]", $person_message_row['FirstName'], $subject); 
       $message = str_replace("[[LastName]]", $person_message_row['LastName'], $message); 
       $subject = str_replace("[[LastName]]", $person_message_row['LastName'], $subject); 
       $message = str_replace("[[EmailAddress]]", $person_message_row['PrimaryEmailAddress'], $message); 
       $subject = str_replace("[[EmailAddress]]", $person_message_row['PrimaryEmailAddress'], $subject); 

       mail($person_message_row['PrimaryEmailAddress'], $subject, $message, $headers); 

       $MessageCount += 1; 
      } 

      mysqli_free_result($select_result); 

      return $MessageCount; // <------- This number returns the correct count. 

     } else { 

      mysqli_free_result($select_result); 

      return 0; 

     } 

    } else { 

     mysqli_free_result($select_result); 

     return 0; 

    } 

} 

ответ

0

Некоторые возможные проходы перечислены ниже, это может помочь.

  1. Проверьте, действительны ли все адреса электронной почты, хранящиеся в db.
  2. Проверьте папку со спамом на соответствующих учетных записях электронной почты.
  3. Поместите свой код в try {} catch(Exception $e) {}, см., Если предоставляет некоторую помощь.
  4. Перед отправкой почты просто напишите данные в файл и посмотрите, все ли в порядке.

С их помощью вы можете найти что-то, чтобы двигаться дальше.

+0

Спасибо, @Franky, я попробовал вариант файла # 4, и у меня есть две записи. После первого сообщения ничего не происходит в папке спама. – user3434662

Смежные вопросы