Tutorials >
PHP >
Nieuwsbriefsysteem
|
Gepost op: 09 februari 2007 - 17:53 |
|
|
|
Eigenaar
|
BCC:
In e-mailprogramma's staat BCC voor Blind carbon copy, waarmee een kopie van een e-mailbericht tegelijkertijd naar een of meer anderen dan de geadresseerde gestuurd kan worden, zonder dat de andere ontvangers van de mail dat kunnen zien.
Gebruik van BCC:
Dit script werkt met een MySQL tabel.
<?php
//e-mailadressen selecteren uit de tabel "leden"
$qEmailadressen = mysql_query ("SELECT email FROM leden") or die (mysql_error());
$aEmailadressen = array();
//met een while loop alle e-mailadressen in een array plaatsen met de vorm -> email@email.be <email@email.be>
while ($obj = mysql_fetch_object($qEmailadressen))
{
$aEmailadressen[] = "\"".$obj->email."\" <".$obj->email.">";
}
//de array imploden en scheiden met een komma zodat we alle e-mailadressen in één variabele ($bcc) krijgen.
$bcc = implode(", ", $aEmailadressen);
//headers
$headers = "From: \"Sitemasters\" <nieuwsbrief@sitemasters.be>\r\n";
$headers .= "Bcc: ".$bcc."\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
//mailen naar het origineel adres, en naar alle andere leden dmv BCC
mail ("origineel@emailadres.be", "Titel", "Bericht", $headers);
?>
<?php //e-mailadressen selecteren uit de tabel "leden" $aEmailadressen = array(); //met een while loop alle e-mailadressen in een array plaatsen met de vorm -> email@email.be <email@email.be> { $aEmailadressen[] = "\"".$obj->email."\" <".$obj->email.">"; } //de array imploden en scheiden met een komma zodat we alle e-mailadressen in één variabele ($bcc) krijgen. $bcc = implode(", ", $aEmailadressen); //headers $headers = "From: \"Sitemasters\" <nieuwsbrief@sitemasters.be>\r\n"; $headers .= "Bcc: ".$bcc."\r\n"; $headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; //mailen naar het origineel adres, en naar alle andere leden dmv BCC mail ("origineel@emailadres.be", "Titel", "Bericht", $headers); ?>
|
|
|
|
Gepost op: 09 februari 2007 - 21:37 |
|
|
|
PHP ver gevorderde
|
|
|
|
Gepost op: 11 februari 2007 - 13:54 |
|
|
|
PHP ver gevorderde
|
De manier van Joel is niet ideaal.
Stel dat er een fout emailadres tussenstaat verzendt hij de mail niet altijd. (Ik heb dat toch al enkele keren gehad)
Verder is dit een methode die nog gaat tot 200 emailadressen, als je een nieuwsbrief moet verzenden naar 1000 (of meer) emailadressen dan is dit ver van de ideale methode.
Ik raad aan om uw nieuwsbrieven (en mss ineens alle mails) te versturen door een smtp-connectie op te zetten.
Zo doe ik dat, en dat gaat redelijk vlot, ook boven de 1000 emailadressen...
|
|
|
|
Gepost op: 12 februari 2007 - 12:22 |
|
|
|
Beheerder
|
Ik voorzie met deze manier heeeeel veel problemen
Je checked of de emailadres een punt en een @ bevat. Stel er is een gebruiker die kwaad wil doen. Die plaatst de volgende string in het invoerveld:
Im.very.evil@this.form.
Deze zal evengoed doorgegeven worden in het bestand.
Verder het afmelden. Stel er is een gebruiker genaamd
jan@hotmail.com deze gebruiker is zich van geen kwaad bewust.
Vervolgens komt er een gebruiker met het adres klaasjan@hotmail.com. Deze gebruiker is na een tijdje het ontvangen van de nieuwsbrief meer dan zat en meld zich af voor deze functie. Wat zal er in je log bestand gebeuren? Dat hoef ik niet te vertellen denk ik
Oplossing eerste probleem: Regular expressions om je emailadres te checken:
<?php
function checkemail($email) {
// regexp syntax
$validEmailExpr = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
// Valideer het email adres
if (!eregi($validEmailExpr, $email)) {
return false;
} else {
return true;
}
}
?>
<?php function checkemail($email) { // regexp syntax $validEmailExpr = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; // Valideer het email adres if (!eregi($validEmailExpr, $email)) { return false; } else { return true; } } ?>
|
|
|
|
Gepost op: 14 februari 2007 - 21:41 |
|
|
|
HTML beginner
|
al aan gedacht als ik een mailinglist van 1000 mensen > heb? Het zou echt kompleet zijn als je dus per 100 kon versturen en dan page refresh |
|
|
|
Gepost op: 17 februari 2007 - 23:42 |
|
|
|
Nieuw lid
|
Het probleem dat ik altijd heb bij zo'n mail-systemen is dat de mails altijd bij Ongewest komen te staan bij hotmail (Of zelfs gewoon niet aankomen!). En 80% van de mensen op mijn nieuwsbrief hebben hotmail.
Is er een manier dat ze netjes in de inbox bij hotmail komen? |
|
|
|
Gepost op: 18 februari 2007 - 11:50 |
|
|
|
PHP ver gevorderde
|
Nee, dat wordt geregeld via hotmail zelf (kun je daar instellen).
Dit kun je niet in zo'n mailscript bepalen.
Als dat wel zo zou zijn dan had die map Ongewenste items weinig zin hè . |
|
|
|
Gepost op: 23 februari 2007 - 16:56 |
|
|
|
PHP expert
|
Als je gemakkelijk boven zo'n tutorial zet vind ik dat je ook wel de moeite mag doen uitleg te geven bij sommige functies als explode of strpos. |
|
|
|
Gepost op: 23 februari 2007 - 17:21 |
|
|
|
PHP ver gevorderde
|
Daar gaat deze tutorial niet over.
Die kun je in de anderen tut's terug vinden, bij overzicht of bij php.net.
Deze moeten ze dus maar zelf opzoeken als ze het niet weten: je moet niet alles voorkauwen, hè . |
|
|
|
Gepost op: 18 april 2007 - 19:27 |
|
|
|
PHP gevorderde
|
Citaat: geen <br> te gebruik
Dat staat bij de admin/cp. Dat gaat gewoon zeggen tot er een nieuwe regel moet gebruikt worden. Dus er komt te staan:
Misschien kun je beter <br> gebruiken. |
|
|
|
Gepost op: 18 april 2008 - 12:30 |
|
|
|
Nieuw lid
|
Hoi,
ik heb even een vraagje over het script.
ik heb de pagina met het script geupload, maar er is niks te zien. (www.julianproductionz.com/nieuws.php)
En ook om de nieuwsbrief te versturen is niks te zien.
(www.julianproductionz.com/maken.php)
Weet iemand wat het probleem is? |
|
|
|
Gepost op: 16 mei 2008 - 11:07 |
|
|
|
PHP ver gevorderde
|
Als je alle stappen rustig volgt moet het gewoon werken dacht ik.
Laat anders eens je totale script zien (plaatscode.be). |
|
|
|
Gepost op: 25 juni 2008 - 16:23 |
|
|
|
Nieuw lid
|
ik heb er een probleem mee...
ik heb een nieuw PHP bestand gebruikt (ik werk met dreamweaver),
op dreamweaver zag ik enkele zaken, maar als ik het uploadde naar m'n site, krijg ik een gwn witte pagina te krijgen
iemand tips? |
|
|
|
Gepost op: 22 augustus 2010 - 19:09 |
|
|
|
MySQL interesse
|
Na ruim 2 jaar is er steeds niks veranderd aan het script.
Ook ik krijg een lege pagina.
Vreemd dat SVM ook niet even geprobeerd heeft om de opgegeven volgorde even zelf uit te testen.
Eh nee ik heb geen zin om het te gaan uitzoeken, mijn motto is:
als het niet werkt, wissen!!!!!
Maar goed ik zal het gevraagde toch maar posten.
Dan kan de schrijver ervan zelf zijn fouten gaan zoeken.
<?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>
<?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'].";\n"); //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>
<?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>
<?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>
<?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.0rn";
$headers .= "Content-type: text/html; charset=iso-8859-1rn";
// hieronder het adres waar het vandaan lijkt te komen
$headers .= "From: Stefan van Mierlo <lid_4808@sitemasters.be>rn";
$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!";
}
}
?>
<?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> <?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 fwrite($fp, $_POST['mailadres'].";\n"); //we zetten naast het mailadres een ; als scheidingsteken 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> <?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{ 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 }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> <?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> <?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.0rn"; $headers .= "Content-type: text/html; charset=iso-8859-1rn"; // hieronder het adres waar het vandaan lijkt te komen $headers .= "From: Stefan van Mierlo <lid_4808@sitemasters.be>rn"; $adressen = explode(";", $adressen); for($i=0;!isset($adressen[$i]);$i++){ } echo "De nieuwsbrief is verstuurd!"; } } ?>
Ik ben benieuwd of het ooit nog werkend gemaakt wordt.
Succes SVM :-) |
|
|
|
Gepost op: 23 augustus 2010 - 09:30 |
|
|
|
PHP ver gevorderde
|
Het probleem waarop jullie duiden heb ik gevonden, maar als je de code bekijkt is het ook logisch dat je een lege pagina krijgt: dit is dus geen fout in het script!
Je moet natuurlijk wel de code lezen en zo dus begrijpen wat het systeem zal gaan ondernemen (het is een simpel php-script).
Wat is namelijk het probleem: in het script wordt telkens gekeken of je óf admin óf aanmelden óf afmelden hebt meegegeven aan het URL.
Je krijgt dan namelijk het volgende:
pagina.php
-> witte/lege pagina
pagina.php?aanmelden
-> aanmeldformulier
pagina.php?afmelden
-> afmeldformulier
pagina.php?admin
-> admin inlogpagina (standaard psw: qwerty)
Het script werkt verder gewoon: ik post niet iets dat niet werkt en het is ook goedgekeurd door de admins.
Ik heb het script nu ook op plaatscode geplaatst zodat je het als geheel kunt downloaden en ik zag ergens een foutje nog in staan door de highlighting oid (een backslash) -> ook doorgevoerd: dit zorgde dat de html incorrect weergeven werd in de e-mail.
-> http://plaatscode.be/139873/ |
|
|
|
Gepost op: 04 september 2010 - 16:56 |
|
|
|
MySQL interesse
|
@SVM: sorry voor het misverstand dat was ontstaan doordat ik het niet helemaal goed begrepen had.
Was even vergeten dat er de toevoeging aan de URL ook nog bij hoorde.
Hartelijke dank voor de terechte verwijzing.
Ik ga het weer even uit proberen en eens kijken of ik het ook nog kan uitbreiden met een password meer voor de veiligheid.
AANVULLING:
heb het getest op mijn site.
aanmelden werkt
afmelden werkt
inloggen werkt
echter zogauw ik op versturen druk komt er een foutmelding: HTTP-fout 500 - Interne serverfout.
Heb ik nog iets over het hoofd gezien???
Mails worden wel verstuurd echter wel als text maar niet als HTML.
Dat is geen probleem, want de juiste .headers heb ik al elders gezien. |
|
|
|
Gepost op: 04 september 2010 - 18:57 |
|
|
|
PHP ver gevorderde
|
De headers zouden in principe moeten werken: bij mij werkten ze namelijk en ik zie ook geen interpunctiefout in de strings: dit kan hem bij je e-mail instellingen zitten.
Die error 500 zit hem niet in het script: waar dat vandaan komt weet ik niet; probeer eens een mailtje los te verzenden met de gebruikte headers en kijk eens of het hem daarin zit.
Eventueel probeer je een andere (openbare) smtp server: ini_set('smtp','smtp.domein.lan'); |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|