Bonjour à tous et toutes,

Je me sers de la class PhpMailer 5.2.4 pour l'envoi des messages système.
Jusque là tout va bien dans le meilleur des monde.

Par contre, si dans la même page j'envoi 2 messages différents (ex: message et confirmation à l'expéditeur)
PhpMail plante: il m'envoit le premier et se plante ensuite sur le deuxième message.

Par contre, si je n'envoi qu'un des deux messages, tout fonctionne parfaitement.
Auriez-vous une idée ?

Merci et bonne journée.

PS: le serveur SMTP est OVH

9 réponses


Carouge10
Réponse acceptée

Ah oui, je n'y aurai pas penser. Plus qu'à mettre le sujet en réolu.
Bonne journée.

Bonjour,

Avec le code des 2 mails serait mieux pour vous aider.

Heaven
Auteur

Merci pour la réponse
Voici le code..

Message 1
$Envoye = EnvoiMess($frm['email'], $frm['nom'], "Message depuis ...", $messhtml , "no-reply@xxx.com", "Nom Expéditeur");
Message 2
$Envoye = EnvoiMess( $DestinataireEmail,$DestinataireNom, "SYSTEM: Message depuis le site ...", $messhtml , $frm->email, $frm->nom);

La fonction:
function EnvoiMess($DestinataireEmail, $DestinataireNom, $Sujet, $MessHtml, $EmetteurEmail, $EmetteurNom)
{
global $boot;
// ENVOI PAR MAIL

require($boot.'inclus/phpmail/PHPMailerAutoload.php');

// Création d'une nouvelle instance PHPMAILER
$mail = new PHPMailer;

// Dire à PHPMailer d'utiliser le protocôle SMTP
$mail->isSMTP();

// Codage du mail
$mail->CharSet = 'UTF-8';

// Activer le débugger SMTP
$mail->SMTPDebug = 0;

// Demandez la sortie du débogage HTML
$mail->Debugoutput = 'html';

// Définir le nom d'hôte du serveur de messagerie
$mail->Host = 'ssl0.ovh.net';

// Définir le numéro de port SMTP à 587 pour authentifié TLS, la soumission SMTP rfc4409 a.k.a.
$mail->Port = 587;

// Réglez le système de chiffrement à utiliser sur ssl (non conseillé) ou tls
$mail->SMTPSecure = 'tls';

// Utiliser l'authentification SMTP
$mail->SMTPAuth = true;

$mail->Username = "Utilisateur";

// Mot de passe à utiliser pour l'authentification SMTP
$mail->Password = "MotDePasse";

// Définir le message qui doit être envoyé à partir de
$mail->setFrom($EmetteurEmail, $EmetteurNom);

// Définir a qui doit-être envoyé le message
$mail->AddAddress($DestinataireEmail, $DestinataireNom);

// Définir le sujet du message
$mail->Subject = $Sujet;

// Intégrer un corps de message en HTML à partir d'un fichier externe, convertir des images référencées intégrées,
// convertir le HTML dans un corps de remplacement de texte brut de base
// $mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
// Votre message
$mail->MsgHTML($MessHtml);

// Remplacer le corps de texte brut avec celui créé manuellement
$mail->AltBody = 'Ceci est un corps de message en HTML / This is a HTML message body';

// Attacher une image
// $mail->addAttachment('images/phpmailer_mini.png');

// Envoyer le message, vérifier les erreurs
if (!$mail->send()) {
    $Erreur = $mail->ErrorInfo;
    return ($Erreur);
}
else
{
    return true;
}

}

d'accord et aucun message d'erreur n'est retourné lors de l'envoie du second message ?

Heaven
Auteur

Non pas de message, juste une erreur 500 du navigateur
Si je refraichis, tout s'affiche normalement.
Le plantage n'est qu'au moment où 2 messages sont envoyé.
Par contre pas de plantage si multi-envois en copie-carbone.
Mais pour moi pas d'intérêt car c'est deux messages différents.

Je pencherais pour un conflit d'instance de $mail.
Essayer de faire un unset($mail); quand l'email est bien envoyé

Heaven
Auteur

Ok je test

Heaven
Auteur

Même erreur...
Encore une truc de fou je crois...

Heaven
Auteur

J'ai trouvé !
Il suffisait de remplacer la ligne: ''require($boot.'inclus/phpmail/PHPMailerAutoload.php');''
par: ''require_once($boot.'inclus/phpmail/PHPMailerAutoload.php');''

Encore merci et bonne journée