PHP делает при отправке писем - PullRequest
0 голосов
/ 21 февраля 2012

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

Есть мысли?

H.

Вывод электронной почты

SMTP Test Email Message

Dear Gary,

Dear Jaime,

Test Message

Here is a quick email test to see what it comes through like. Link: = 

Test

Does it do formatting correctly and what is the situation with dual = names appearing etc?

Kind regards,

Gary. 
 Link: http:// 

Test

Does it do formatting correctly and what is the situation with dual names appearing etc?

Kind regards,

Gary.

Фрагмент кода

do {
    $dear = "<font face='Arial' size='2'>Dear " . $row["forename"] . ",<br><br></font>";

    $email_body = $dear . "<font face='Arial' size='2'>" . stripslashes($body) . "</font><br><br><font face='Arial' size='2'>" . $linky . "  <a href='" . $row["link"] . "'> " . $row["link"] . "</a> </font> <br><br><font face='Arial' size='2'>" . stripslashes($body2) . "</font>";

    $subject = $sub;

$bcc = "blob.blob@blob.co.uk";
$recipients = $row["email"].",".$bcc;
// Constructing the email
$sender = $bcc;                                             
$recipient = $recipients;                               
$subject = $subject;                                                

$html = $email_body;      
$crlf = "\n";
    $headers = array(
        'To'        => $row["Mail"],
        'From'          => $sender,
        'Return-Path'   => $sender,
        'Subject'       => $subject
                     );

// Creating the Mime message
$mime = new Mail_mime($crlf);

// Setting the body of the email
//$mime->setTXTBody($text);
    $mime->setHTMLBody($html);


// Set body and headers ready for base mail class
$body = $mime->get();
$headers = $mime->headers($headers);

// SMTP authentication params
$smtp_params["host"]     = "scr.emserv.com";
$smtp_params["port"]     = "25";
$smtp_params["auth"]     = true;
$smtp_params["username"] = "blob.blob@blob.co.uk";
$smtp_params["password"] = "blob";

// Sending the email using smtp
$mail =& Mail::factory("smtp", $smtp_params);
sleep(2);
$result = $mail->send($recipient, $headers, $body);

for($i=0;$i<$elements1;$i++){
$bar1->increase(); //calls the bar with every processed element
$bar1->setMessage('Sending emails (2 second delay between each): '.(($i+1)*$sent).'%');

}

if($row["sent"]=='YES'){
$reminder = $row["reminder"] + 1;
$update = mysql_query("UPDATE $table SET reminder = $reminder WHERE respondent_id = " . $row["respondent_id"] . " ") or die("Could not update record<br>".mysql_error());
}else

$update = mysql_query("UPDATE $table SET sent = 'YES' WHERE respondent_id = " . $row["respondent_id"] . " ") or die("Could not update record<br>".mysql_error());

} while ($row = mysql_fetch_assoc($results));
    $bar1->setMessage('Emails have now been sent: 100%');
    }

1 Ответ

1 голос
/ 21 февраля 2012

Причина, по которой вы видите эту проблему, заключается в том, что вы не очищаете переменную $ body. Каждый раз в цикле он в основном добавляет его к переменной $ email_body в этой строке:

$email_body = $dear . "<font face='Arial' size='2'>" . stripslashes($body) ...

Далее вы устанавливаете $ body для всего сообщения:

$body = $mime->get();

get () возвращает все сообщение в виде строки . Также не имеет смысла, что вы будете использовать $ body изначально, поскольку он не инициализируется в цикле do while до первой строки, которую я перечислил.

...