Mailing foreach qui plante après 1er envoi

Résolu
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 16 janv. 2024 à 11:09
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 - 16 janv. 2024 à 14:56

Bonjour,

J'ai ce code qui ne fonctionne qu'avec le 1er enregistrement et qui ensuite s'arrête en m'indiquant "Erreur lors de l'envoi du mail à ".$Mail"

Je met le champ actif à "Non" pour le mail envoyé et en relançant la page, elle envoie à nouveau le mail suivant sans plus.

d'où cela pourrait-il venir ?

$sql = 'SELECT Mail FROM Mailing where Actif = "OUI"'; 
try {
  $table = $bdd->prepare($sql);
  $table->execute();
  $table_bdd = $table->fetchAll(); 
} catch (Exception $e) {
  echo "Erreur : " . $e->getMessage();
}

foreach ($table_bdd as $K => $V) {
  $Mail = $V['Mail'];

//affiche le mail traité
  echo "<br><pre>";
  echo $Mail;
  echo "</pre>";

     // destinataire
     $to  = $Mail; 

     // Sujet
     $subject = 'sujet';

     // message
     $message = '
     <html>
      <head>
       <title>titre</title>
      </head>
      <body>
        message   		
      </body>
     </html>
     ';

     $headers[] = 'MIME-Version: 1.0';
     $headers[] = 'Content-type: text/html; charset=utf8';
     $headers[] = 'From: adresse envoi';

     // Envoi
  if(!mail($to, $subject, $message, implode("\r\n", $headers))){ 
    echo "<br>Erreur lors de l'envoi du mail à ".$Mail;
  }else{
    echo "<br>L'email a été envoyé.";
  }
}

?>

Merci d'avance à celui ou celle qui m'expliquera.

Daniel
Windows / Firefox 121.0

3 réponses

yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 janv. 2024 à 13:27

bonjour,

moi je commencerais par sortir les lignes 21 à 38 de la boucle.

1
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
16 janv. 2024 à 13:52

Bonjour yg_be,

Impressionnant !

Effectivement les éléments du mail défini en amont de la boucle, il ne reste plus dans la boucle que l'envoi pour chaque adresse et ça change tout....
Pourquoi ??? car pour un néophyte comme moi en lisant (du moins en essayant de traduire) le code cela semblait bon.
Bon, j'espère garder à l'esprit que ce qui est "fixe" est à sortir des boucles et que celles-ci doivent s'appliquer qu'à l'élément variable.

Bon am et merci encore.
Daniel

0
yg_be Messages postés 22733 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
16 janv. 2024 à 14:21

Pour comprendre, reprends ton code de départ et ajoute, dans la boucle:

print_r($headers);
1
danielos77 Messages postés 108 Date d'inscription samedi 18 février 2006 Statut Membre Dernière intervention 16 janvier 2024 2
16 janv. 2024 à 14:56

Ok, Les headers se recopient dans le headers => erreur. Il aurait fallu vider le header avant de retraiter un nouvel enregistrement ou sinon... sortir la structure du mail de la boucle ... et là on dit merci yg_be.

0