2009-05-12 6 views
0

Я использовал два PHP-скрипта электронной почты и маршрутизацию через свой SMTP-сервер, когда я это делаю, хотя он отправляет два одинаковых письма.Два письма при отправке через SMTP

Когда я использую mail(), этого не происходит, но я бы скорее использовал SMTP.

Любые идеи, почему это может произойти?

+1

Есть ли у вас код для отображения? – lothar

+0

Я использую PHPMailer или топ-класс электронной почты PHP на PHPClasses. Весь стандартный код, не измененный мной. Это происходит с обоими из них, но только при использовании SMTP. – James

+0

Похоже, проблема связана с конфигурацией вашего SMTP-сервера, а не с вашим кодом PHP. –

ответ

0

Так что, если вы используете только PHPMailer без редактирования его код, это не вина вашего скрипта. Возможно, проверьте конфигурацию вашего SMTP-сервера?

1

Если вы несколько раз устанавливаете заголовок «Кому» и/или «Получатель», SMTP-сервер может интерпретировать это как отдельный адрес электронной почты, таким образом, вы получите несколько электронных писем.

Я бы рекомендовал использовать класс PEAR Mail. Очень прост в использовании и обрабатывает большую часть работы для вас. Он поддерживает несколько бэкэндов, включая SMTP. Аналогично, если вы хотите расширить свой класс для отправки электронных писем HTML, класс Mail_Mime обрабатывает это очень красиво, предоставляя методы для установки тела обычного текста и тела HTML (в случае, если получатель не поддерживает HTML).

0
function send_email($from, $fromname, $to, $subject, $body, $alt = '') 
{ 
    require_once('class.phpmailer.php'); 
    //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded 

    $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch 

    $mail->IsSMTP(); // telling the class to use SMTP 

    try 
    { 
     $mail->Host  = 'localhost'; // SMTP server 
     $mail->SMTPDebug = 2;      // enables SMTP debug information (for testing) 
     //$mail->AddReplyTo($from, $fromname); 
     $mail->AddAddress($to); 
     $mail->SetFrom($from, $fromname); 
     $mail->Subject = $subject; 
     //$mail->AltBody = $alt; // optional - MsgHTML will create an alternate automatically 
     $mail->MsgHTML($body); 
     $mail->Send(); 
     echo 'Message Sent OK'; 
    } 
    catch (phpmailerException $e) 
    { 
     echo $e->errorMessage(); //Pretty error messages from PHPMailer 
    } 
    catch (Exception $e) 
    { 
     echo $e->getMessage(); //Boring error messages from anything else! 
    } 
} 

Это текущую функцию до сих пор

+0

Возможно, вы захотите опубликовать это как отредактировать исходное сообщение, а не как «ответ», на ваш вопрос. – cmptrgeekken

0

На основании вашего кода, если это класс, который виноват, вы ожидаете получить сообщение «Сообщение отправлено OK» дважды (я не понимаю, почему это произойдет). Если вы этого не сделаете, я бы посмотрел на ваш SMTP-сервер (возможно, через вызов для поддержки).

Я предполагаю, что вы отключили ответ-ответ, чтобы исключить его в качестве причины в этом случае? Примечание. Я не предполагаю, что это повлияет на что-либо (кроме вас, вероятно, классифицируется как спам).

Кстати, я перешел с PHPMailer на Swift Mailer некоторое время назад & никогда не оглядывался назад. Если вы не получите никакой радости от поддержки, я бы попробовал хотя бы тестирование с Swift Mailer.

0

Я согласен с тем, что сказал da5id, почему вы не берете второе сообщение об ошибке. Кроме того, вы проверили получателя, имеют ли они ДЕЙСТВИТЕЛЬНО 2 сообщения?

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