par
Jean Yve » 24 oct. 2019, 13:34
Bonjour,
Je développe un site de gestion de stock et une des fonctionnalités est l'envoi d'un mail via PHPMailer 6.1.1 lorsque qu'un produit arrive en dessous d'un seuil.
J'arrive bien à récupérer la liste des objets contenu dans ma table en base de données mais dans le mail un seul objet s'affiche (alors que je devrais en avoir deux).
Ce code est ensuite destiné à être dans un Cron afin qu'il s’exécute tous les x Heures.
Voici le code :
<?php
include_once('bdd.php'); //$bdd
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/* Exception class. */
require 'PHPMailer-master/src/Exception.php';
/* The main PHPMailer class. */
require 'PHPMailer-master/src/PHPMailer.php';
/* SMTP class, needed if you want to use SMTP. */
require 'PHPMailer-master/src/SMTP.php';
$users = $bdd->query('SELECT id, nom, prenom, email, responmat, president FROM protec_membre WHERE responmat = 1 OR president = 1');
$nombreproduit = $bdd->query('SELECT produit, COUNT(produit) AS nbproduit FROM protec_inv WHERE nombre < nombrelimite AND emaillownbr = 0');
$produitliste = $bdd->query('SELECT id, produit, nombre, nombrelimite, emaillownbr FROM protec_inv WHERE nombre < nombrelimite AND emaillownbr = 0');
$nbproduit = $nombreproduit->fetch();
$nombreproduit = $nbproduit['nbproduit'];
if ($nombreproduit >= 1) {
$mail = new PHPMailer(true);
try {
//Server settings
$mail->isSMTP();
while ($produit = $produitliste->fetch())
{
$listeproduit = $produit['produit'];
$html = "<li>".$listeproduit."</li><br />";
var_dump($html);
}
while ($util = $users->fetch())
{
$mail->addBCC($util['email'], $util['prenom']);
}
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->Host = '***';
$mail->SMTPAuth = true;
$mail->Username = '***@***.fr';
$mail->Password = '***';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('***@***.fr', '***');
$mail->addAddress('***.***@orange.fr');
$mail->isHTML(true);
$mail->Subject = 'Alerte Stock Faible';
$mail->Body = '
<html>
<body>
<div align="center">
<u>Bonjour</u><br />
<u>Les produits suivant seront bientôt hors stock : </u><br />
'.$html.'
</div>
</body>
</html>
';
var_dump($html);
$mail->send();
$mail->clearAddresses();
$mail->clearBCCs();
echo "Mail envoyé";
} catch (Exception $e) {
echo "Mail non envoyé. Erreur: {$mail->ErrorInfo}";
}
}
?>
Sur ma page php j'ai ces retours suites aux var_dump du code ci-dessus :
https://imgur.com/a/OFKbanX
Et mon mail ressemble à ceci :
https://imgur.com/a/FgzdRd7
Je n'arrive pas à comprendre pourquoi dans mon premier var_dump je récupère les 2 produits alors que dans mon mail je ne vois que le second produit, malgré de nombreux tests... J'ai donc dû passer à coter de quelque chose.
Merci de votre aide.
Jean Yve
Bonjour,
Je développe un site de gestion de stock et une des fonctionnalités est l'envoi d'un mail via PHPMailer 6.1.1 lorsque qu'un produit arrive en dessous d'un seuil.
J'arrive bien à récupérer la liste des objets contenu dans ma table en base de données mais dans le mail un seul objet s'affiche (alors que je devrais en avoir deux).
Ce code est ensuite destiné à être dans un Cron afin qu'il s’exécute tous les x Heures.
Voici le code :
[PHP]
<?php
include_once('bdd.php'); //$bdd
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/* Exception class. */
require 'PHPMailer-master/src/Exception.php';
/* The main PHPMailer class. */
require 'PHPMailer-master/src/PHPMailer.php';
/* SMTP class, needed if you want to use SMTP. */
require 'PHPMailer-master/src/SMTP.php';
$users = $bdd->query('SELECT id, nom, prenom, email, responmat, president FROM protec_membre WHERE responmat = 1 OR president = 1');
$nombreproduit = $bdd->query('SELECT produit, COUNT(produit) AS nbproduit FROM protec_inv WHERE nombre < nombrelimite AND emaillownbr = 0');
$produitliste = $bdd->query('SELECT id, produit, nombre, nombrelimite, emaillownbr FROM protec_inv WHERE nombre < nombrelimite AND emaillownbr = 0');
$nbproduit = $nombreproduit->fetch();
$nombreproduit = $nbproduit['nbproduit'];
if ($nombreproduit >= 1) {
$mail = new PHPMailer(true);
try {
//Server settings
$mail->isSMTP();
while ($produit = $produitliste->fetch())
{
$listeproduit = $produit['produit'];
$html = "<li>".$listeproduit."</li><br />";
var_dump($html);
}
while ($util = $users->fetch())
{
$mail->addBCC($util['email'], $util['prenom']);
}
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->Host = '***';
$mail->SMTPAuth = true;
$mail->Username = '***@***.fr';
$mail->Password = '***';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
//Recipients
$mail->setFrom('***@***.fr', '***');
$mail->addAddress('***.***@orange.fr');
$mail->isHTML(true);
$mail->Subject = 'Alerte Stock Faible';
$mail->Body = '
<html>
<body>
<div align="center">
<u>Bonjour</u><br />
<u>Les produits suivant seront bientôt hors stock : </u><br />
'.$html.'
</div>
</body>
</html>
';
var_dump($html);
$mail->send();
$mail->clearAddresses();
$mail->clearBCCs();
echo "Mail envoyé";
} catch (Exception $e) {
echo "Mail non envoyé. Erreur: {$mail->ErrorInfo}";
}
}
?>
[/PHP]
Sur ma page php j'ai ces retours suites aux var_dump du code ci-dessus :
[url]https://imgur.com/a/OFKbanX[/url]
Et mon mail ressemble à ceci :
[url]https://imgur.com/a/FgzdRd7[/url]
Je n'arrive pas à comprendre pourquoi dans mon premier var_dump je récupère les 2 produits alors que dans mon mail je ne vois que le second produit, malgré de nombreux tests... J'ai donc dû passer à coter de quelque chose.
Merci de votre aide.
Jean Yve