Nieuwsbrief script
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)
<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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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'])){
?>
}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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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'])){
?>
}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)
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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!";
}
}
?>
// 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
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 -
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)
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
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!";
}
}
?>
$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!";
}
}
?>
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.
Leuk script voor in het PHP-museum.