login  Naam:   Wachtwoord: 
Registreer je!
 Nota's op tutorial:

Tutorials > PHP > Nieuwsbriefsysteem
Pagina:

Reacties op de tutorial Nieuwsbriefsysteem


Offline  Joel
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.

  1. <?php
  2. //e-mailadressen selecteren uit de tabel "leden"
  3. $qEmailadressen = mysql_query ("SELECT email FROM leden") or die (mysql_error());
  4.  
  5. $aEmailadressen = array();
  6.  
  7. //met een while loop alle e-mailadressen in een array plaatsen met de vorm -> email@email.be <email@email.be>
  8. while ($obj = mysql_fetch_object($qEmailadressen))
  9. {
  10. $aEmailadressen[] = "\"".$obj->email."\" <".$obj->email.">";
  11. }
  12.  
  13. //de array imploden en scheiden met een komma zodat we alle e-mailadressen in één variabele ($bcc) krijgen.
  14. $bcc = implode(", ", $aEmailadressen);
  15.  
  16. //headers
  17. $headers = "From: \"Sitemasters\" <nieuwsbrief@sitemasters.be>\r\n";
  18. $headers .= "Bcc: ".$bcc."\r\n";
  19. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  20.  
  21. //mailen naar het origineel adres, en naar alle andere leden dmv BCC
  22. mail ("origineel@emailadres.be", "Titel", "Bericht", $headers);
  23. ?>

Offline  Button
Gepost op: 09 februari 2007 - 21:37
PHP ver gevorderde

mime-informatie
http://nl.wikip...Extensions
http://email.about.com/cs/standards/a/mime.htm

Offline  webstab
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...

Offline  marten
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:

  1. <?php
  2. function checkemail($email) {
  3. // regexp syntax
  4. $validEmailExpr = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
  5.  
  6. // Valideer het email adres
  7. if (!eregi($validEmailExpr, $email)) {
  8. return false;
  9. } else {
  10. return true;
  11. }
  12. }
  13. ?>

Offline  ThAlmighty
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

Offline  Brunge
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?

Offline  svm
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è .

Offline  ikkedikke
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.

Offline  svm
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è .

Offline  Godlord
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:

Citaat:
geen
te gebruik


Misschien kun je beter &lt;br&gt; gebruiken.

Offline  JulianProduc
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? 

Offline  svm
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).

Offline  DJJonasty
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?

Offline  peerke59
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.

  1. <?php
  2. $file = "nieuws.log"; //de naam van het bestand waar de e-mailadressen inkomen
  3.  
  4. if(isset($_GET['aanmelden'])){
  5. if(!isset($_POST['submit'])){
  6. ?>
  7.  
  8. <form action="" method="post">
  9. Voer uw e-mailadres in waarop u de nieuwsbrief wilt ontvangen:<br>
  10. <input type="text" name="mailadres"><br><br>
  11. <input type="submit" name="submit" value="Aanmelden">
  12. </form>
  13.  
  14. <?php
  15. }else{
  16. //eerst even controleren of alles correct ingevult is
  17. if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], ".")){
  18. exit("U hebt een ongeldig e-mailadres opgegeven!");
  19. }else{
  20. //als er niks mis mee is in een flatfile plaatsen
  21. $fp = fopen($file, 'a');
  22. fwrite($fp, $_POST['mailadres'].";\n"); //we zetten naast het mailadres een ; als scheidingsteken
  23. fclose($fp);
  24. echo "U bent met succes aangemeld!";
  25. }
  26. }
  27. }
  28. elseif(isset($_GET['afmelden'])){
  29. if(!isset($_POST['mailadres'])){
  30. ?>
  31.  
  32. <form action="" method="post">
  33. Voer uw e-mailadres in waarop u zich wilt afmelden:<br>
  34. <input type="text" name="mailadres"><br><br>
  35. <input type="submit" name="submit" value="Aanmelden">
  36. </form>
  37.  
  38. <?php
  39. }else{
  40. // weer controleren
  41. if(empty($_POST['mailadres']) OR !strpos($_POST['mailadres'], "@") OR !strpos($_POST['mailadres'], ".")){
  42. exit("U hebt een ongeldig e-mailadres opgegeven!");
  43. }else{
  44. $inhoud = file_get_contents($file); // opvragen van de emailadressen
  45. if(strpos($inhoud, $_POST['mailadres'])){
  46. $inhoud = str_replace($_POST['mailadres'].";", "", $inhoud); //adres met ; verwijderen
  47. $fp = fopen($file, 'w'); // $file leeg openen voor schrijven
  48. fwrite($fp, $inhoud); //andere adressen terug plaatsen
  49. fclose($fp);
  50. echo "U bent afgemeld!";
  51. }else{
  52. exit("Het opgegeven e-mailadres is niet aangemeld in ons systeem.");
  53. }
  54. }
  55. }
  56. }
  57. elseif(isset($_GET['admin'])){
  58. $w8w = "qwerty"; //het wachtwoord om in te loggen
  59. //ter beveiliging een loginformpje
  60. if(!isset($_POST['submit']) OR (isset($_POST['wachtw']) && $w8w != $_POST['wachtw'])){
  61. ?>
  62.  
  63. <form action='' method='post'>
  64. Voer het wachtwoord in:<br>
  65. <input type='text' name='wachtw'><br><br>
  66. <input type='submit' value='Log In' name='submit'>
  67. </form>
  68.  
  69. <?php
  70. }elseif(isset($_POST['submit']) && isset($_POST['wachtw']) && $w8w == $_POST['wachtw']){
  71. ?>
  72.  
  73. Welkom admin.<br>
  74. Hieronder kunt u een nieuwe nieuwsbrief verzenden.<br>
  75. Deze maakt u in HTML, maar u hoeft geen <br> te gebruiken: dit wordt automatisch gedaan.<br><br>
  76.  
  77. <form action='' method='post'>
  78. Onderwerp: <input type='text' name='onderwerp'><br><br>
  79. Bericht:<br>
  80. <textarea cols='50' rows='10' name='mail'></textarea><br><br>
  81. <input type='submit' name='submit' value='Verzend'>
  82. </form>
  83.  
  84. <?php
  85. // het verzenden
  86. }elseif(isset($_POST['onderwerp'])){
  87. /* we hebben een bestand volgepropt met emailadressen
  88.   deze emailadressen moeten dus van elkaar gescheiden worden
  89.   en elk moet dezelfde mail ontvangen
  90.   dit gaan we doen met explode() en een for-loop
  91.   ook gaan we headers gebruiken, deze zie je hieronder
  92.   */
  93. // HTML gebruiken
  94. $headers = "MIME-Version: 1.0rn";
  95. $headers .= "Content-type: text/html; charset=iso-8859-1rn";
  96. // hieronder het adres waar het vandaan lijkt te komen
  97. $headers .= "From: Stefan van Mierlo <lid_4808@sitemasters.be>rn";
  98.  
  99. $adressen = file_get_contents($file);
  100. $adressen = explode(";", $adressen);
  101. for($i=0;!isset($adressen[$i]);$i++){
  102. mail($adressen[$i], stripslashes($_POST['onderwerp']), nl2br($_POST['mail']), $headers); //het mailen
  103. }
  104. echo "De nieuwsbrief is verstuurd!";
  105. }
  106. }
  107.  
  108. ?>


Ik ben benieuwd of het ooit nog werkend gemaakt wordt.

Succes SVM :-)

Offline  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/

Offline  peerke59
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.

Offline  svm
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');

Pagina:

Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.057s