2009-05-12 6 views
0

J'ai utilisé deux scripts d'e-mail PHP et je l'ai routé via mon serveur SMTP, quand je le fais, mais j'envoie deux e-mails identiques.Deux e-mails envoyés via SMTP

Lorsque j'utilise mail() cela n'arrive pas, mais je préfère utiliser le protocole SMTP.

Des idées pour lesquelles cela peut se produire?

+1

Avez-vous du code à afficher? – lothar

+0

J'utilise PHPMailer ou la classe supérieure d'e-mail PHP sur PHPClasses. Tout le code standard, pas modifié par moi. Cela se produit avec les deux, mais seulement lorsque j'utilise SMTP. – James

+0

Il semble que le problème soit lié à la configuration de votre serveur SMTP, et non à votre code PHP. –

Répondre

0

Donc, si vous n'utilisez PHPMailer sans modifier son code, ce n'est pas la faute de votre script. Peut-être vérifier la configuration de votre serveur SMTP?

1

Si vous définissez l'en-tête 'À' et/ou 'Destinataire' plusieurs fois, le serveur SMTP peut interpréter cela comme une adresse e-mail distincte, ainsi vous recevrez les multiples e-mails.

Je vous recommande d'utiliser la classe PEAR Mail. Très simple à utiliser, et gère une grande partie du travail pour vous. Il supporte plusieurs backends y compris SMTP. De même, si vous voulez étendre votre classe pour envoyer des courriels HTML, la classe Mail_Mime gère cela très bien, en fournissant des méthodes pour définir le corps en texte brut et le corps HTML (dans le cas où le destinataire ne supporte pas 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! 
    } 
} 

C'est la fonction actuelle jusqu'à

+0

Vous pourriez vouloir publier ceci en tant que modification du message original, plutôt que comme réponse à votre question. – cmptrgeekken

0

En fonction de votre code, si c'est la classe qui est en faute, vous vous attendez à recevoir deux fois le message 'Message Sent OK' (je ne vois pas pourquoi cela arriverait). Si vous ne le faites pas, alors je regarderais votre serveur SMTP (peut-être via un appel à l'appui).

Je suppose que vous avez désactivé Reply-to pour l'exclure comme cause dans ce cas? Remarque: Je ne suggère pas que cela affecterait quoi que ce soit (à part que vous soyez probablement classé comme spam). Incidemment, je suis passé de PHPMailer à Swift Mailer il y a quelque temps & je n'ai jamais regardé en arrière. Si vous ne recevez pas de joie du support, alors j'essayerais au moins de tester avec Swift Mailer.

0

Je suis d'accord avec ce que dit da5id, pourquoi ne pas prendre le deuxième message d'erreur. En outre avez-vous vérifié le récepteur si ils reçoivent VRAIMENT 2 messages?

Questions connexes