2012-01-19 2 views
4

Я отправляю электронные письма через библиотеку SwiftMailer PHP. У меня есть этот PHP-код для отправки 1 электронной почты одному получателю электронной почты от 1 отправителя. Вот код:Почему SwiftMailer отправляет два письма?

$email = /*some email recipient*/; 

$sendEmail = /*sender's email*/; 
$sendName = /*sender's name*/; 
$subject = /*email subject*/; 
$body = /*email body*/; 

//Create the message 
//Create the Transport 
$transport = Swift_SmtpTransport::newInstance('/*mail host*/', /*port*/) 
->setUsername('/*some username*/') 
->setPassword('/*some password*/') 
; 

//Create the Mailer using your created Transport 
$mailer = Swift_Mailer::newInstance($transport); 

//Create a message 
$message = Swift_Message::newInstance($subject) 
->setFrom(array($sendEmail => $sendName)) 
->setTo($email) 
->setBody($body, 'text/html') 
; 

//Send the message 
$result = $mailer->send($message); 

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

ОБНОВЛЕНИЕ - вот полный код:

Здесь вся страница:

<?php 

ob_start(); 
session_start(); 

require_once ('config.php'); 
require_once 'swiftmailer/lib/swift_required.php'; 
include ('functions.php'); 
require_once (MYSQL); 

sendConfirmation(12,3,$dbc); 

ob_end_flush(); 
?> 

А вот функция, которая содержит ссылку на страницу (которая находится в файле functions.php :.

function sendConfirmation($signup_id,$app_id,$dbc){ 

    //get signup email and ref code 
    $q = "SELECT email, ref_code FROM sign_ups WHERE (signup_id='$signup_id')"; 
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 

    $email; 
    $ref; 

    if (mysqli_num_rows($r) == 1){ 
     $row = mysqli_fetch_array($r, MYSQLI_ASSOC); 
     $email = $row['email']; 
     $ref = $row['ref_code']; 
    } 

    //get app info (subject, email body, sender email, sender name) 
    $q = "SELECT bsignupemail_subj, bsignup_email, email, name, bsignup_url FROM apps WHERE (app_id='$app_id')"; 
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc)); 

    $sendEmail; 
    $sendName; 
    $subject; 
    $body; 
    $url; 

    if (mysqli_num_rows($r) == 1){ 
     $row = mysqli_fetch_array($r, MYSQLI_ASSOC); 
     $url = $row['bsignup_url']; 
     $sendEmail = $row['email']; 
     $sendName = $row['name']; 
     $subject = $row['bsignupemail_subj']; 
     $body = $row['bsignup_email']; 
    } 


    //Create the message 
    //Create the Transport 
    $transport = Swift_SmtpTransport::newInstance('/*host*/', /*port*/) 
     ->setUsername('/*username*/') 
     ->setPassword('/*password*/') 
     ; 

    //Create the Mailer using your created Transport 
    $mailer = Swift_Mailer::newInstance($transport); 

    //Create a message 
    $message = Swift_Message::newInstance($subject) 
     ->setFrom(array($sendEmail => $sendName)) 
     ->setTo(array($email))  
     ->setBody($body, 'text/html') 
     ; 

    //Send the message 
    $result = $mailer->send($message); 
} 
+2

Вы уверены ** ** ваш сценарий не вызывался дважды? Используйте сниффер пакетов на своем сервере или проверьте свои журналы очень осторожно. Расширения браузера часто попадают на страницу независимо, для сканирования безопасности, а что нет. Также часто встречаются внешние образы от Google AdSense или других. – Brad

+0

@Brad Я просто запускаю скрипт сам по себе на своей локальной машине, поэтому я не думаю, что это повлияло бы на него. – chromedude

+1

@Brad Я только что проверил свои журналы, и похоже, что скрипт вызывается дважды каждый раз ... странно - спасибо! – chromedude

ответ

4

Это может быть связано с логической ошибки, когда код с помощью Swift Mailer это просят его дважды отправить

Проверьте наличие ошибочных циклов, рекурсивных вызовов функций и нескольких включений и инициализации переменных и т. Д. Что-то говорит Swift Mailer, чтобы отправить письмо дважды.

+0

Это то, о чем я думал, но я много раз пересматривал свой код, ища подобные ошибки. Я только что опубликовал полный код ответа. Не могли бы вы взглянуть на него? (это не намного больше, чем раньше) – chromedude

+0

обе почты имеют одинаковый контент? –

+0

может быть связано с ob_start() ;, ob_end_flush(); проверьте один раз без этих –

1

Для тех, кто имеет такое же использование выпуска:

return $this->redirectToRoute('route', array('parameter'=>$parameter)); 

вместо:

return $this->render(...);