Beste forumleden,

Kan iemand mij vertellen waarom ieder bedrijf 50x een email heeft ontvangen met de volgende code:

<?php 

$database = new database();
         $q = 'SELECT * FROM klanten WHERE status = 1';
         $result = $database->query($q);
          
         $mail = new PHPMailer();  
         
         while ($rows = mysqli_fetch_assoc($result))
         {

             // Verstuur emailtje naar bedrijf om weer is kijkje te nemen

                $mail->setFrom(EMAIL, 'Sarah'. NAAM);
                $mail->AddReplyTo(EMAIL, 'Sarah'. NAAM);
                $mail->AddAddress($rows['email'], $rows['voornaams'].' '.$rows['achternaam']); 
                $mail->IsHTML(true);          
                $mail->Subject = 'Jouw maandelijkse statistieken '.verkrijgBedrijfsnaam($rows['id']).' op '.NAAM.'';  
                include '/home/tomenjelle/domains/100dichtbij.nl/public_html/assets/mails/bedrijven-maandelijkse-herinnering-statistieken.php';
                $message = $contentStatistieken;            
                    
                $mail->Body = $message;
                $mail->Send();
    
     }
?>


Cronjob: 00 12 1 * * /path

Ik hoor graag een reactie.
Als je regel 7 verplaatst naar regel 13 (in de while statement) zal dit waarschijnlijk opgelost zijn. Je voeg nu steeds een nieuwe ontvanger toe aan dezelfde mail en stuurt die mail nogmaals. Door regel 7 te verplaatsen maak je elke keer een nieuwe mail aan.
Ik neem aan dat je zulke kritische scripts eerst op een eigen aantal test-mailadressen uitvoert. Nu heb je de kans dat je tijdelijk op een blacklist zou kunnen komen. ;-)

Testen blijft belangrijk!
of je gebruikt ClearAllReceipients() op regel 24

https://phpmailer.github.io/PHPMailer/classes/PHPMailer.html#method_clearAllRecipients

regels 14, 15 en 17 kunnen trouwens ook naar boven voor de start van de while lus.

Keer op keer hetzelfde FROMadres instellen, voegt niets toe.


Probeer het zo goedkoop mogelijk te houden: binnen de lus steeds opnieuw phpmailer instantiëren kost natuurlijk ook recources, net als het steeds opnieuw instellen van hetzelfde from-adres etc.

Ik zou in de lus alleen doen wat veranderlijk is.
Het verschil tussen addSomething() en setSomething() ...
Dit zou het dus moeten oplossen?

<?php

$database = new database();
         $q = 'SELECT * FROM klanten WHERE status = 1';
         $result = $database->query($q);
          
         
        
         while ($rows = mysqli_fetch_assoc($result))
         {

             // Verstuur emailtje naar bedrijf om weer is kijkje te nemen

               $mail = new PHPMailer();                  
               $mail->setFrom(EMAIL, 'Sarah'. NAAM);
                $mail->AddReplyTo(EMAIL, 'Sarah'. NAAM);
                $mail->AddAddress($rows['email'], $rows['voornaams'].' '.$rows['achternaam']);
                $mail->IsHTML(true);          
                $mail->Subject = 'Jouw maandelijkse statistieken '.verkrijgBedrijfsnaam($rows['id']).' op '.NAAM.'';  
                include '/home/tomenjelle/domains/100dichtbij.nl/public_html/assets/mails/bedrijven-maandelijkse-herinnering-statistieken.php';
                $message = $contentStatistieken;            
                    
                $mail->Body = $message;
                $mail->Send();
    
     }
?>
of

<?php

$database = new database();
$q = 'SELECT * FROM klanten WHERE status = 1';
$result = $database->query($q);
$mail = new PHPMailer();
$mail->setFrom(EMAIL, 'Sarah'. NAAM);
$mail->AddReplyTo(EMAIL, 'Sarah'. NAAM);
$mail->IsHTML(true);



while ($rows = mysqli_fetch_assoc($result))
{

// Verstuur emailtje naar bedrijf om weer is kijkje te nemen

$mail->AddAddress($rows['email'], $rows['voornaams'].' '.$rows['achternaam']);
$mail->Subject = 'Jouw maandelijkse statistieken '.verkrijgBedrijfsnaam($rows['id']).' op '.NAAM.'';
include '/home/tomenjelle/domains/100dichtbij.nl/public_html/assets/mails/bedrijven-maandelijkse-herinnering-statistieken.php';
$message = $contentStatistieken;

$mail->Body = $message;
$mail->Send();
$mail->ClearAllReceipients();

}
?>

[size=xsmall]Toevoeging op 05/12/2016 14:25:54:[/size]

en dan evt. nog uit te breiden met een check of Send() wel true terug gaf.

En ik zou ook proberen bij te houden of je de mail al verstuurd hebt deze maand.

Zou je script per vergissing 5 keer draaien, dan zal nu namelijk iedereen gewoon 5x zijn mail krijgen.
Vink je af dat de mail van december al geweest is, dan zou hij de 2e / 5e keer gewoon niets doen.

Reageren