Nieuwsbrief script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcus geleyn

marcus geleyn

23/08/2023 09:19:04
Quote Anchor link
Hallo iedereen,

ik heb op het internet een eenvoudig scriptje gevonden om in te tekenen op nieuwsbrieven, uit te schrijven en te versturen. Bij dat laatste krijg ik als admin de melding dat de nieuwsbrief verstuurd werd, maar niemand ontvangt iets. Iemand een idee wat ik over het hoofd zie? Alvast bedankt!

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$file
= "nieuws.log"; //de naam van het bestand waar de e-mailadressen inkomen

if(isset($_GET['aanmelden'])){
 if(!isset($_POST['submit'])){
?>


<form action="" method="post">
Voer uw e-mailadres in waarop u de nieuwsbrief wilt ontvangen:<br>
<input type="text" name="mailadres"><br><br>
<input type="submit" name="submit" value="Aanmelden">
</form>

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
<?php
 }else{
  //eerst even controleren of alles correct ingevult is
  if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], ".")){
   exit("U hebt een ongeldig e-mailadres opgegeven!");
  }
else{
   //als er niks mis mee is in een flatfile plaatsen
   $fp = fopen($file, 'a');
   fwrite($fp, $_POST['mailadres']."; "); //we zetten naast het mailadres een ; als scheidingsteken
   fclose($fp);
   echo "U bent met succes aangemeld!";
  }
 }
}

elseif(isset($_GET['afmelden'])){
 if(!isset($_POST['mailadres'])){
?>


<form action="" method="post">
Voer uw e-mailadres in waarop u zich wilt afmelden:<br>
<input type="text" name="mailadres"><br><br>
<input type="submit" name="submit" value="Aanmelden">
</form>

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
20
21
22
23
24
<?php
 }else{
  // weer controleren
  if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], ".")){
   exit("U hebt een ongeldig e-mailadres opgegeven!");
  }
else{
   $inhoud = file_get_contents($file); // opvragen van de emailadressen
   if(strpos($inhoud, $_POST['mailadres'])){
    $inhoud = str_replace($_POST['mailadres'].";", "", $inhoud); //adres met ; verwijderen
    $fp = fopen($file, 'w'); // $file leeg openen voor schrijven
    fwrite($fp, $inhoud); //andere adressen terug plaatsen
    fclose($fp);
    echo "U bent afgemeld!";
   }
else{
    exit("Het opgegeven e-mailadres is niet aangemeld in ons systeem.");
   }
  }
 }
}

elseif(isset($_GET['admin'])){
 $w8w = "qwerty"; //het wachtwoord om in te loggen
 //ter beveiliging een loginformpje

 if(!isset($_POST['submit']) OR (isset($_POST['wachtw']) && $w8w != $_POST['wachtw'])){
?>


<form action="" method='post'>
Voer het wachtwoord in:<br>
<input type='text' name='wachtw'><br><br>
<input type='submit' value='Log In' name='submit'>
</form>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
 }elseif(isset($_POST['submit']) && isset($_POST['wachtw']) && $w8w == $_POST['wachtw']){
?>


Welkom admin.<br>
Hieronder kunt u een nieuwe nieuwsbrief verzenden.<br>
Deze maakt u in HTML, maar u hoeft geen <br> te gebruiken: dit wordt automatisch gedaan.<br><br>

<form action="" method='post'>
Onderwerp: <input type='text' name='onderwerp'><br><br>
Bericht:<br>
<textarea cols='50' rows='10' name='mail'></textarea><br><br>
<input type='submit' name='submit' value='Verzend'>
</form>

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
20
21
22
23
24
<?php
  // het verzenden
 }elseif(isset($_POST['onderwerp'])){
  /* we hebben een bestand volgepropt met emailadressen
     deze emailadressen moeten dus van elkaar gescheiden worden
     en elk moet dezelfde mail ontvangen
     dit gaan we doen met explode() en een for-loop
     ook gaan we headers gebruiken, deze zie je hieronder
  */
  // HTML gebruiken

  $headers = "MIME-Version: 1.0 ";
  $headers .= "Content-type: text/html; charset=iso-8859-1 ";
  // hieronder het adres waar het vandaan lijkt te komen
  $headers .= "From: Team XXXXXX <info@mijn gewijzigd emailadres.be> ";

  $adressen = file_get_contents($file);
  $adressen = explode(";", $adressen);
  for($i=0;isset($adressen[$i]);$i++){
   mail($adressen[$i], stripslashes($_POST['onderwerp']), nl2br($_POST['mail']), $headers); //het mailen
  }
  echo "De nieuwsbrief is verstuurd!";
 }
}

?>
Gewijzigd op 23/08/2023 09:21:11 door Marcus geleyn
 
PHP hulp

PHP hulp

27/05/2024 11:07:36
 
- Ariën  -
Beheerder

- Ariën -

23/08/2023 09:24:02
Quote Anchor link
Debug het eens door een echo in je for-loop te plaatsen met de benidigde variabel uit mail(). Dan weet je in ieder geval of alle gegevens correct gebruikt worden.

Als test mag ik toch wel hopen dat je een test-lijst met mailadressen gebruikt.

Verder is mijn advies om liever phpMailer te gebruiken. Die is robuuster, en communiceert ook makkelijk via SMTP, wat de betere weg is om een e-mail te versturen.

Maar waarom gebruik je geen database? Dat is veel makkelijker te beheren dan een compleet tekstbestand, waarvan ik van harte hoop dat deze niet publiekelijk beschikbaar is. (Datalek!!)

En plaats graag code-tags om je lap code.
Gewijzigd op 23/08/2023 09:27:06 door - Ariën -
 
Evert Bennekom

Evert Bennekom

23/08/2023 19:48:33
Quote Anchor link
Heb het script net even getest. Het werkt gewoon. Mails worden verstuurd. Als je fakemailgenerator.com gebruikt voor een paar wegwerp email adressen dan zie je dat ze ook gewoon ontvangen worden.
Ik vermoed dat het probleem eerder zit in dat de emails als spam worden aangemerkt en je ze daarom nooit ziet.

Verder, Vroeger waren php programmeurs een stuk knapper dan nu. Ik kan die oude spaghetti niet lezen dus eerst maar eens wat leesbaarder gemaakt.

Tenslotte, mijn advies. Na het testen dit script onmiddellijk wegsmijten. Er is zoveel mis mee dat ik niet eens zou weten waar te beginnen....

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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php

$file
= "nieuws.log"; //de naam van het bestand waar de e-mailadressen inkomen

if(isset($_GET['aanmelden']))
{

    if(!isset($_POST['submit']))
    {


        echo <<<ANM

        <form action="" method="post">
            Voer uw e-mailadres in waarop u de nieuwsbrief wilt ontvangen:<br>
            <input type="text" name="mailadres"><br><br>
            <input type="submit" name="submit" value="Aanmelden">
        </form>

ANM
;
    }

    else
    {
        //eerst even controleren of alles correct ingevult is
        if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], "."))
        {

            exit("U hebt een ongeldig e-mailadres opgegeven!");
        }

        else
        {
            //als er niks mis mee is in een flatfile plaatsen
            $fp = fopen($file, 'a');
            fwrite($fp, $_POST['mailadres']."; "); //we zetten naast het mailadres een ; als scheidingsteken
            fclose($fp);
            echo "U bent met succes aangemeld!";
        }
    }
}

elseif(isset($_GET['afmelden']))
{

    if(!isset($_POST['mailadres']))
    {

        echo <<<AFM
            <form action="" method="post">
                Voer uw e-mailadres in waarop u zich wilt afmelden:<br>
                <input type="text" name="mailadres"><br><br>
                <input type="submit" name="submit" value="Aanmelden">
            </form>
AFM
;

    }

    else
    {
        // weer controleren
        if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], ".")){
            exit("U hebt een ongeldig e-mailadres opgegeven!");
        }

        else
        {
            $inhoud = file_get_contents($file); // opvragen van de emailadressen
            if(strpos($inhoud, $_POST['mailadres']))
            {

                $inhoud = str_replace($_POST['mailadres'].";", "", $inhoud); //adres met ; verwijderen
                $fp = fopen($file, 'w'); // $file leeg openen voor schrijven
                fwrite($fp, $inhoud); //andere adressen terug plaatsen
                fclose($fp);
                echo "U bent afgemeld!";
            }

            else
            {
                exit("Het opgegeven e-mailadres is niet aangemeld in ons systeem.");
            }
        }
    }
}

elseif(isset($_GET['admin']))
{

    $w8w = "qwerty"; //het wachtwoord om in te loggen
    //ter beveiliging een loginformpje

    if(!isset($_POST['submit']) OR (isset($_POST['wachtw']) && $w8w != $_POST['wachtw']))
    {

        echo <<<WWF
        <form action="" method='post'>
            Voer het wachtwoord in:<br>
            <input type='text' name='wachtw'><br><br>
            <input type='submit' value='Log In' name='submit'>
        </form>
WWF
;

    }

    elseif(isset($_POST['submit']) && isset($_POST['wachtw']) && $w8w == $_POST['wachtw'])
    {

        echo <<<ADM
        Welkom admin.<br>
        Hieronder kunt u een nieuwe nieuwsbrief verzenden.<br>
        Deze maakt u in HTML, maar u hoeft geen <br> te gebruiken: dit wordt automatisch gedaan.<br><br>

        <form action="" method='post'>
            Onderwerp: <input type='text' name='onderwerp'><br><br>
            Bericht:<br>
            <textarea cols='50' rows='10' name='mail'></textarea><br><br>
            <input type='submit' name='submit' value='Verzend'>
        </form>
ADM
;

    
    }

    elseif(isset($_POST['onderwerp']))
    {

        // het verzenden
        /* we hebben een bestand volgepropt met emailadressen
        deze emailadressen moeten dus van elkaar gescheiden worden
        en elk moet dezelfde mail ontvangen
        dit gaan we doen met explode() en een for-loop
        ook gaan we headers gebruiken, deze zie je hieronder
        */
        // HTML gebruiken

        $headers = "MIME-Version: 1.0 ";
        $headers .= "Content-type: text/html; charset=iso-8859-1 ";
        // hieronder het adres waar het vandaan lijkt te komen
        $headers .= "From: Team XXXXXX <info@mijn gewijzigd emailadres.be> ";

        $adressen = file_get_contents($file);
        $adressen = explode(";", $adressen);
        for($i=0;isset($adressen[$i]);$i++)
        {

            mail($adressen[$i], stripslashes($_POST['onderwerp']), nl2br($_POST['mail']), $headers); //het mailen
        }
        echo "De nieuwsbrief is verstuurd!";
    }
}

?>
 
Ivo P

Ivo P

23/08/2023 22:08:34
Quote Anchor link
Ik vraag me af of dit script ook onder PHP 4.3 nog zou draaien.
file_get_contents() is het nieuwste in het script, na $_GET en $_POST wat uit 4.1 stamt.

Heredoc zie je ook niet echt heel vaak meer.
en stripslashes()? Waar zouden de slashes vandaan moeten komen? die magie is al heel lang geleden standaard uitgezet in PHP settings en ook al best veel jaren geleden geheel overboord gegaan.
 
- Ariën  -
Beheerder

- Ariën -

23/08/2023 22:28:31
Quote Anchor link
Leuk script voor in het PHP-museum.
 



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.