У меня есть простая проблема, которая сводит меня с ума.Почта только отправляется один раз внутри 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;
}
}
Спасибо, @Franky, я попробовал вариант файла # 4, и у меня есть две записи. После первого сообщения ничего не происходит в папке спама. – user3434662