2012-02-21 2 views
0

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

Любые мысли?

H.

выход Email

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 = "[email protected]"; 
$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"] = "[email protected]"; 
$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%'); 
    } 
+0

Отладка, выгружая материал, который вы передаете в вызов '$ mail-> send()', если в нем есть удвоенные электронные письма, то это ваш код, вызывающий проблему. И в конце, если почта не отправлена, вы все равно обновляете БД, чтобы сказать, что она была отправлена ​​!? –

ответ

1

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

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

Дальше вниз вы установите $ тело всего сообщения:

$body = $mime->get();

get() returns the entire message as a string. Также не имеет смысла, что вы будете использовать $ body изначально, так как он не инициализирован в этом цикле do while до первой строки, которую я перечислял.

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