Cronjob stuurt 50x mail naar hetzelfde bedrijf?
Kan iemand mij vertellen waarom ieder bedrijf 50x een email heeft ontvangen met de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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();
}
?>
$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.
Testen blijft belangrijk!
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() ...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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();
}
?>
$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();
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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();
}
?>
$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();
}
?>
Toevoeging op 05/12/2016 14:25:54:
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.