[RESOLU] Problème avec PHP Mailer

Eléphanteau du PHP | 47 Messages

13 déc. 2021, 10:07

Bonjour à tous,

J'ai une application web qui utilise phpMailer, quand j'envoie un mail à une personne pas de problème.
Mais j'aimerais envoyer à certain moment des mails à un groupe de personne. J'arrive à récupérer les adresses dans un tableau depuis ma BDD. Mais j'ai une erreur quand je veux ajouter ceux-ci en série.

Voici mon code simplifié :

Code : Tout sélectionner

$db = Database::connect(); $db->exec("SET CHARACTER SET utf8"); $stmtAdr=$db->prepare("SELECT email FROM users"); $stmtAdr->execute(); //Récupération de mes adresses dans un tableau while($affAdr = $stmtAdr->fetch()){ if(!empty($affAdr)){ $adr[] = $affAdr['email']; } } print_r($adr); // Affichage du tableau -> OK tout est conforme foreach($adr as $recAdr){ $mail->addAddress($recAdr); $mail.=", "; //Ajout d'une virgule et d'un espace après chaque adresse } $mail = rtrim($mail,", "); //Suppression du dernier espace et de la dernière virgule // Envoi du / des message(s) $sujet = $name; $message = $body; envmail($mail, $sujet, $message); exit();
Voici l'erreur : " Call to a member function addAddress() on string "

Si je mets une adresse ça fonctionne mais pas avec ma boucle. Si quelqu'un pouvait m'aiguiller ça serait super sympa.

Merci d'avance et bonne journée

ynx
Mammouth du PHP | 586 Messages

13 déc. 2021, 19:28

Bonjour,

Comme l'indique le message d'erreur, la variable $mail est une chaine de caractère (string), il n'est donc pas possible d'appeler une méthode (addAddress) sur une variable de type string.
La méthode addAddress() doit être utilisée sur la variable dans laquelle tu as instancié la classe PHPMailer (via l'instruction "new PHPMailer()").
Où et comment utilises-tu la classe PHPMailer dans ton code ?

A priori, dans la chaine de caractère $mail, tu concatènes toutes les adresses en les séparant par une virgule. A moins que ce soit pour autre chose, tu ne devrais pas avoir à t'embêter à faire ça pour envoyer un mail à plusieurs destinataires avec PHPMailer.

Je suppose que PHPMailer est utilisée dans la fonction envmail().
A ta place, au lieu de passer la variable $mail en premier paramètre de la fonction envmail(), je lui passerai directement le tableau des adresses $adr. Puis dans la fonction envmail() je pourrais faire une boucle sur ce tableau pour ajouter les destinataires du mail via la fonction addAddress() utilisée sur l'instance de la classe PHPMailer.

Eléphanteau du PHP | 47 Messages

14 déc. 2021, 10:17

Salut ynx,

Un tout grand merci pour ta réponse, je vais essayer de cette manière et je te dis quoi ;-)

Eléphanteau du PHP | 47 Messages

14 déc. 2021, 15:24

Re,

ynx, un tout grand merci pour t'on aide tout fonctionne correctement \:D/