Nieuwsbrief e-mailen naar adressen uit de database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pim B

Pim B

05/02/2011 15:10:00
Quote Anchor link
Hoi,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);
         }

?>

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?
 
PHP hulp

PHP hulp

28/01/2022 12:35:01
 
Rolf -

Rolf -

05/02/2011 16:08:15
Quote Anchor link
Hoe maak je je $content aan?

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.
 
Jordi Kroon

Jordi Kroon

05/02/2011 16:09:39
Quote Anchor link
Je kan beter swiftmailer gebruiken
Voor email injection te voorkomen
 
Obelix Idefix

Obelix Idefix

05/02/2011 16:28:14
Quote Anchor link
Waarom staat de content in de while lus om mails te versturen?
Zoals Rolf al aangeeft, zit daar vermoedelijk het probleem.
 
Pim B

Pim B

05/02/2011 16:35:53
Quote Anchor link
De mail wordt naar meerdere mensen verstuurd. Als ik alleen de mailadressen in de while-lus zet, ziet iedereen alle mailadressen. En dat wil ik niet.
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
 
Jasper DS

Jasper DS

05/02/2011 16:37:47
Quote Anchor link
zet dan in de $to je eigen mail adres. (niet de beste oplossing!)
Gewijzigd op 05/02/2011 16:38:03 door Jasper DS
 
Rolf -

Rolf -

05/02/2011 16:53:19
Quote Anchor link
Zoals ik dus al zei ligt dat aan hoe je je $content opbouwt.
Kijk hier eens naar of post het anders eens hier :)
 
Pim B

Pim B

05/02/2011 17:15:09
Quote Anchor link
De content bestaat uit ruim 200 regels inclusief if-statements en variabelen die uit een formulier komen. En inderdaad heel veel $content .=
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.
 
Rolf -

Rolf -

05/02/2011 17:21:06
Quote Anchor link
Ok even voorbeeldje.
Zet dit maar eens in een pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
    for($i = 1; $i <= 5; $i++)
    {

        $content .= "test <br>";
    }

    
    echo $content;
?>

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.
 
Pim B

Pim B

05/02/2011 17:32:58
Quote Anchor link
Ok, ik begrijp het. Maar vanwege de if-statements heb ik $content .= wel nodig.
Dan wordt het toch Jaspers oplossing.
 
Rolf -

Rolf -

05/02/2011 17:37:00
Quote Anchor link
Dat is niet per se nodig hoor, want je kan content .= ook buiten je while-loop aanmaken.

Maar Jaspers oplossing is waarschijnlijk het makkelijkste voor jou.

Succes nog!
 
- Mark -

- Mark -

05/02/2011 17:41:44
Quote Anchor link
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?
 
Marco M

Marco M

05/02/2011 18:19:04
Quote Anchor link
Zoals hierboven verteld word zijn er twee manieren. Wanneer je nieuwsbrief unieke content bevat voor de gebruiker zal je $content binnen de while-loop opbouwen. Is de nieuwsbrief voor iedereen hetzelfde? Dan bouw je het buiten de while-loop. Voorbeeld voor de laatste variant:

Algemeen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
         }

?>



Waarschijnlijk zoals jij het hebt gedaan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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='';
          }
?>
Gewijzigd op 05/02/2011 18:19:31 door Marco M
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.