Nieuwsbrief e-mailen naar adressen uit de database
Ik heb een nieuwsbrief gemaakt en die wil ik automatisch e-mailen naar alle mailadressen uit een database.
M'n code ziet er ongeveer zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
}
?>
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
}
?>
Ik heb 4 mailadressen in m'n database staan (m'n eigen + 3 aliassen daarvan - om te testen). In principe gaat alles goed: na submit krijg ik 4 mailtjes in m'n inbox. De nieuwsbrief zelf ziet er ook goed uit.
Er is alleen 1 probleem: in 1 mailtje staat de nieuwsbrief gewoon 1 keer. Maar in de andere staat de nieuwsbrief resp. 2, 3 en 4 keer onder elkaar. En dat is natuurlijk niet de bedoeling. Als je 100 contacten hebt, krijgt iemand 100 keer dezelfde nieuwsbrief in een mailtje.
Wat doe ik verkeerd?
Waarschijnlijk zo:
$content .= "blaat";
$content .= "blaat 2";
en zo verder..
Als je dat zo doet wordt je $content steeds verder uitgebreid.
Dus probeer dan alles in 1 variabele te zetten of buiten de while-loop.
Voor email injection te voorkomen
Zoals Rolf al aangeeft, zit daar vermoedelijk het probleem.
Ik dacht als ik de hele content ook in de while zet, krijgt iedereen apart een mailtje met alleen z'n eigen e-mailadres in de From.
Ik heb ook al gedacht om alle e-mailadressen in een Bcc-header te zetten, maar dan heb ik geen $to en werkt het dus ook niet.
Wat ik heb (dus met content in de while) werkt in principe goed. Alleen wordt de content per mailadres meerdere keren in de mail gezet (bij 5 mailadressen krijgt iemand de hele content 5x, iemand andere 4x enz). Ik heb geen idee hoe dat komt, maar dat wil ik oplossen.
Gewijzigd op 05/02/2011 16:36:11 door Pim B
Gewijzigd op 05/02/2011 16:38:03 door Jasper DS
Kijk hier eens naar of post het anders eens hier :)
Ik begrijp alleen niet hoe de opbouw van de $content van invloed kan zijn op het feit dat hij de hele content zo vaak afdrukt als dat er mailadressen zijn.
Zet dit maar eens in een pagina:
Wat je nu ziet is 5 keer test.
Dit komt omdat elke keer als de lus doorlopen wordt er een keer "test" aan $content toegevoegd wordt.
Dit gebeurt ook met jouw while-loop.
Dan wordt het toch Jaspers oplossing.
Maar Jaspers oplossing is waarschijnlijk het makkelijkste voor jou.
Succes nog!
Het is maar een gok omdat we niet de gehele code kunnen inzien maar kun je $content niet resetten voordat je aan een nieuwe E-mail begint? Er wordt dan niet alles aan elkaar wordt geplakt?
Algemeen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$content = 'Hoi';
$content .= 'Dit is een nieuwsbrief';
$content .= 'Doei';
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
}
?>
$content = 'Hoi';
$content .= 'Dit is een nieuwsbrief';
$content .= 'Doei';
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
}
?>
Waarschijnlijk zoals jij het hebt gedaan:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$content .= 'Hoi';
$content .= 'Dit is een nieuwsbrief verstuurd aan '.$abc['emailadres'].'.';
$content .= 'Doei';
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
// RESET INHOUD VAN CONTENT
unset($content); // of $content='';
}
?>
// Selecteer alle mailadressen om de nieuwsbrief naar te versturen \\
$selectmail = mysql_query("SELECT emailadres FROM nbb_email");
while($abc = mysql_fetch_assoc($selectmail))
{
$content .= 'Hoi';
$content .= 'Dit is een nieuwsbrief verstuurd aan '.$abc['emailadres'].'.';
$content .= 'Doei';
$to = $abc['emailadres'];
// Hieronder komt de hele nieuwsbrief incl. content, subject en headers.
mail($to, $content, $subject, $headers);
// RESET INHOUD VAN CONTENT
unset($content); // of $content='';
}
?>
Gewijzigd op 05/02/2011 18:19:31 door Marco M