Два письма при отправке через SMTP

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

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

Любые идеи, почему это может происходить?


person James    schedule 12.05.2009    source источник
comment
У вас есть код, чтобы показать?   -  person lothar    schedule 12.05.2009
comment
Я использую PHPMailer или лучший класс электронной почты PHP на PHPClasses. Весь стандартный код, не измененный мной. Это происходит с ними обоими, но только когда я использую SMTP.   -  person James    schedule 12.05.2009
comment
Похоже, проблема связана с конфигурацией вашего SMTP-сервера, а не с вашим PHP-кодом.   -  person John Douthat    schedule 12.05.2009
comment
Да. Любые идеи, как я могу найти исправление для этого, какие-либо общие области или мне следует связаться с моим хостом?   -  person James    schedule 12.05.2009
comment
Я использовал PHPMailer в прошлом, и это довольно хорошо. Если вы определенно не вызываете метод дважды, я бы проверил ваши журналы SMTP (если возможно) и/или запросил хост   -  person David Snabel-Caunt    schedule 12.05.2009


Ответы (5)


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

person Daniel Sorichetti    schedule 13.05.2009

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

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

person drowe    schedule 12.05.2009

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!
    }
}   

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

person James    schedule 12.05.2009
comment
Возможно, вы захотите опубликовать это как редактирование исходного сообщения, а не как «ответ» на ваш вопрос. - person cmptrgeekken; 13.05.2009

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

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

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

person da5id    schedule 13.05.2009

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

person Community    schedule 13.05.2009