login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Database adressen met nieuwsbrief versturen (Opgelost)

Offline peerke59 - 30/04/2011 15:53 (laatste wijziging 30/04/2011 17:03)
Avatar van peerke59MySQL interesse Het wil me nog steeds niet lukken om een eenvoudige nieuwsbrief te versturen via een database.
Ik heb het wel voor elkaar om de database (8 records) aan te spreken, maar om de adressen om te zetten naar verzenden dat wil me nog niet helemaal lukken.
Wat ik gevonden heb op internet probeer ik nu tesamen te voegen.
momenteel krijg ik eerst een aantal keren dat de nieuwsbrief succesvol is verstuurd (8 keer), daarna een wachttijd.
Daarna wordt er naar elke record uit de database(8) een email in één keer verstuurd en 8 keer naar $to (regel 20)
de omgekeerde wereld dus.
Wat is hier mis in de bijgevoegde code???
Plaatscode: 140985

46 antwoorden

Gesponsorde links
Offline ArieMedia - 02/05/2011 10:08
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Citaat:
Wat is hier mis in de bijgevoegde code???

Best veel eigenlijk.

De volgende variabelen worden niet gezet:
$jouwEmail
$jouwWebsiteNaam
$to

Wacht, $to word toch wel gezet?!
  1. $to = $jouwEmail; // regel 20

Dat klopt! maar $jouwEmail niet, dus in $to zit dus.. niks, en dat is de voornaamste reden waarom jou script niet werkt.

  1. echo("<hr><b>De nieuwsbrief is succesvol verstuurd!</b><hr><br>");

Niet waar, je bent de loop succesvol doorgelopen, maar of er iets verstuurd is weet je niet. Daarnaast is het niet nodig om de haakjes te gebruiken rond echo, sterker nog.. bijna niemand gebruikt de haakjes rond echo.

  1. $b_Succes = true;
  2. while(....) {
  3. if(mail($to, $subject, $message, $headers)) {
  4. echo 'Mail verstuurd naar '.$to;
  5. } else $b_Succes = false;
  6. }
  7. if($b_Succes == true) {
  8. echo 'De mailing is succesvol verlopen';
  9. } else {
  10. echo 'Er is een fout opgetreden tijdens de mailing';
  11. }



Minor dingen:
  1. $headers .= 'From:'."$jouwWebsiteNaam"."<$jouwEmail>". "\r\n";

Bah, bah, bah.. quotes om een variabele waar je vervolgens geen HTML omheen zet is lelijk, het mag echter wel van PHP, maar is codetechnisch gewoon ranzig.
  1. $headers .= 'From:'.$jouwWebsiteNaam."<$jouwEmail>". "\r\n";

Is al netter, maar wat nog netter zal zijn (imo)
  1. $headers .= 'From:'.$jouwWebsiteNaam.'<'.$jouwEmail."> \r\n";

De reden waarom ik bij de laatste dubbelquotes neerzet, is omdat anders de \r\n niet werkt.

En tot slot: Tab goed in! Maakt je code een stuk overzichtelijker. Het lijkt mij een zeer goed idee om wat tutorials door te lezen voordat je een stukje code probeert te schrijven of te kopieren. Je weet dan namelijk wat beter wat je doet, als je niet zeker weet hoe een functie werkt kan je altijd terecht op php.net/functie-naam.

Succes!
Offline Aar - 02/05/2011 17:00
Avatar van Aar PHP interesse Waarom gebruik je geen SwiftMailer of phpMailer?
Dat werkt stukken makkelijker....
Offline peerke59 - 08/05/2011 10:46
Avatar van peerke59 MySQL interesse @ArieMedia: alvast bedankt voor de verbeteringen.

@Aar: we hebben het al vaker gehad over PHPmailer.
En ja ik kan er nog steeds niet uitkomen hoe of wat ik er van moet of mag gebruiken.
Door de veelvoud aan voorbeelden zie ik nog steeds niet hoe.
Zoekende op het grote internet kan ik nog steeds geen begrijpelijke uitleg in het nederlands vinden.
Zou je voor mij niet even tijd willen nemen om een perfecte uitleg te geven?

Welke bestanden heb ik nou wel nodig?
En wat en hoe zou ik eventueel in die bestanden moeten aanpassen?
Wat zijn eventuele veranderingen aan mijn geplaatste code om PHPmailer te gebruiken?

Momenteel ben ik zover dat ik merk dat mijn provider hooguit maar 8 mailtjes laat versturen en dat daarna de routine wordt afgeblokt.
Al met al: ik begrijp nog steeds PHPmailer niet, dat is uniek omdat ik het over het algemeen wel snel door heb hoe iets werkt.
Zou je die uitdaging willen doen voor mij?
Offline Aar - 09/05/2011 13:39 (laatste wijziging 09/05/2011 13:54)
Avatar van Aar PHP interesse Wat begrijp je niet aan phpMailer? Heb je uberhaupt de examples (voorbeelden) al bekeken? Ook hebben ze een uitgebreide documentatie....

Ik zou zeggen, probeer eens wat, en zeg niet dat je het niet kunt ;).

Een mooie oplossing is om de SMTP van jouw provider (niet je hostingprovider) te gebruiken, en heb heb je niet meer met het limiet te maken.
Offline peerke59 - 10/05/2011 16:30 (laatste wijziging 10/05/2011 16:39)
Avatar van peerke59 MySQL interesse Ja ik begrijp het niet, daar ik gewoon eerlijk voor uit.

Wat moet ik er eigenlijk van die voorbeelden gebruiken?
Heb ik een bepaald bestandje alleen nodig?
Moet ik het oproepen vanuit een ander bestandje?
Welke veranderingen moet ik eventueel aanbrengen en waar?

Dat soort dingen aan uitleg vind ik nergens terug.
Wat heb ik aan een veelvoud van webpagina's die allemaal vertellen dat het zo geweldig werkt?
Maar nergens een gedegen goede uitleg hoe of wat.

En ja ik heb al een tijdje phpmailer 5.0.2 gedownload.
De benodigde bestanden ge-upload.
Maar waar vind ik nou bijvoorbeeld die index.php?
Directory's hebben ook een andere naam dan dat de readme vermeld.
Wel erg duidelijk zo, geen wonder dat ik het niet begrijp.
Offline Aar - 10/05/2011 17:13
Avatar van Aar PHP interesse Maar WAT begrijp je niet? Heb je al de moeite genomen om iets uit te proberen?
Ik heb meer het idee dat je alleen maar kijkt en niks probeert?

Ik zal even een hint geven:kijk eens in de map /examples/test_smtp_basic.php
Hiermee kan je prima mailen via een SMTP-server, zoals die van Ziggo bijvoorbeeld.
Offline peerke59 - 14/05/2011 07:41 (laatste wijziging 14/05/2011 13:20)
Avatar van peerke59 MySQL interesse @Aar: okee, ik ga dat ene bestandje bekijken hoe dat in elkaar zit.
Uiteraard kan ik zelf al zien of dat ik het in combinatie moet gaan gebruiken met een ander bestand (eventueel aanroepen e.d.)
Dus als het verder goed begrijp heb ik verder niks anders nodig, tenzij het aangeroepen wordt vanuit dat bestandje.
Mocht ik het verder nog steeds niet begrijpen dan probeer ik mijn vraag wel beter te omschrijven.
Alvast bedankt.

(Nou maar hopen dat er ook in staat dat ik een interval in kan stellen om na de zoveel tijd een volgend pakketje naar het volgende groepje leden te sturen.
Het is me wat he.  )

-----
aanvulling
-----
okee dat ik volgens het voorbeeld in test_smtp_basic.php een paar dingen in stel is me duidelijk
Maar dan heb ik nog steeds niet door waar ik de rest in stel.

Waar spreek ik mijn database aan?
Waar staan de instellingen die ik moet maken met mijn provider om het te versturen?
Zijn er nog meer bestanden behalve class.phpmailer.php die ik moet hebben?
Moet ik in class.phpmailer.php ook iets veranderen?
ik mis de nodige aanwijzingen waar wat te moeten veranderen.
Ik neem aan dat de genoemde content.html verandert moet worden in de te verzenden nieuwsbrief?

Google-en naar oplossingen brengt me ook niet veel verder met duidelijke aanwijzingen.
Het is net al net zo erg als of dat je een boek koopt om het een en ander te leren hoe en je vind alleen maar boeken met hoe een webwinkel te bouwen.
Kijk dat was nou net niet de bedoeling een webwinkel.
De aanwijzingen op http://netters.nl/artikelen/php-en-mysql/phpmailer/ zijn ook zo summier als het maar mogelijk is.

Wat ik nou werkelijk zoek is:
A] neem die en die en die bestanden.
B] verander daar en daar in dat bestand zus en zo

Dat is pas uitleggen hoe je phpmailer gaat gebruiken.
Voor alsnog vind ik alleen maar vragen van anderen hoe je het moet instellen.
Ik ben dus de zoveelste die in de rij staat.
Offline Aar - 14/05/2011 13:07
Avatar van Aar PHP interesse Om hoeveel mails gaat het die je wilt versturen?
Offline peerke59 - 14/05/2011 13:23
Avatar van peerke59 MySQL interesse het gaat steeds om een mail met een nieuwsbrief bijlage die naar pakweg 100 adressen gestuurd moet worden en dat om de maand ofzo.
zie ook de aanvulling op mijn vorige reactie
Offline Aar - 14/05/2011 14:46
Avatar van Aar PHP interesse 100 mails is geen probleem, dit stuur ik zonder problemen zomaar weg met phpMailer zonder een interval....

Gewoon een goede SMTP-server gebruiken van je provider (Ziggo) en test die eens uit met 100 mails.
Offline peerke59 - 14/05/2011 15:03 (laatste wijziging 14/05/2011 15:22)
Avatar van peerke59 MySQL interesse moet ik in class.phpmailer.php ook iets veranderen? (instellingen????)

zo te zien lijkt mij test_db_smtp_basic.php eerder van toepassing
in combinatie met class.phpmailer.php
Voorts zie ik dat class.smtp.php ook nog aangesproken wordt (?)

De instellingen maken in test_db_smtp_basic.php lijkt me duidelijjk, hier kom ik wel uit.
verder begrijp ik dat content.html dus de file is die verzonden gaat worden.

Maar blijft me de vraag nog over:

moet ik iets veranderen in:
class.smtp.php en in class.phpmailer.php ????
Offline Aar - 14/05/2011 15:21
Avatar van Aar PHP interesse Nee, in een class hoor je nooit wat aan te passen.
Offline peerke59 - 14/05/2011 15:25
Avatar van peerke59 MySQL interesse Kijk even naar de vorige reactie!

Ik heb dus nodig:

class.phpmailer.php
class.smtp.php
test_db_smtp_basic.php (waar ik de nodige instellingen aanpas)
content.html (als voorbeeld)
DIR images (ook als voorbeeld)

is dit juist????
Offline Aar - 14/05/2011 15:28 (laatste wijziging 14/05/2011 15:33)
Avatar van Aar PHP interesse try...

Dan weet je of het werkt ;)..
Offline peerke59 - 14/05/2011 15:38 (laatste wijziging 14/05/2011 15:39)
Avatar van peerke59 MySQL interesse gut o gut, is het nou zo moeilijk om te zeggen dat ik al de aangegeven bestanden echt nodig heb?
of dat ik wellicht een bestandje niet nodig heb?????
Zit er niet op te kijken dat ziggo over een uurtje mijn verbinding af sluit omdat ik al eerder een kapitale fout heb gemaakt.
Het liefst werk ik toch met een interval.

Maar goed ik ga het zaakje instellen, online zetten, testen en maar afwachten wat er gaat gebeuren.
Offline Aar - 14/05/2011 15:41 (laatste wijziging 14/05/2011 15:59)
Avatar van Aar PHP interesse
Citaat:
gut o gut, is het nou zo moeilijk om te zeggen dat ik al de aangegeven bestanden echt nodig heb?

Je kan toch proberen? Wat is daar mis mee? Als je iets mist is er verder heus niks ergs aan de hand hoor je krijgt dan een foutmelding die je verteld wat er mis is.
Zelf wat proberen kan heus geen kwaad.


Citaat:
Zit er niet op te kijken dat ziggo over een uurtje mijn verbinding af sluit om dat ik al eerder een kapitale fout heb gemaakt.

Welkom in de wereld van doemscenario's...
Zulke fratsen zullen ze echt niet doen. 100 Mailtjes is echt peanuts....
Hoeveel verenigingen met tientallen of enkele honderd leden zullen bij Ziggo zitten?/

En als je het alsnog echt niet vertrouwd, waarom neem je geen contact met Ziggo op over hoeveel mails ze toestaan?
Offline peerke59 - 14/05/2011 16:36
Avatar van peerke59 MySQL interesse er gebeurd niks!!!!
ik heb de gegevens ingevuld en de bestanden ge-upload
ik start test_db_smtp_basic.php
ik krijg een kompleet leeg scherm in IE met de melding onderaan in de balk: Gereed

meer niet, er komt ook geen e-mail binnen.
Offline Aar - 14/05/2011 16:41 (laatste wijziging 14/05/2011 16:42)
Avatar van Aar PHP interesse Zet eens binnen je <?php blok van test_db_smtp_basic.php eens bovenaan:
  1. ini_set('display_errors',1);
Offline peerke59 - 14/05/2011 16:44
Avatar van peerke59 MySQL interesse nog steeds niks!!
ik zie wel de groene balk onderaan lopen, ten teken dat er iets aan het laden is ofzo.
Offline Aar - 14/05/2011 16:47 (laatste wijziging 14/05/2011 16:48)
Avatar van Aar PHP interesse Laat je code uit test_db_smtp_basic.php eens zien?

Een mailing versturen zou in enkele seconden wel gebeurd zijn overigens.
Offline peerke59 - 14/05/2011 16:51 (laatste wijziging 14/05/2011 16:55)
Avatar van peerke59 MySQL interesse daar was ik al mee bezig, moest even de gegevens er uit halen die ik ingesteld had
Heb nu in hoofdletters ingevuld wat ik verandert had

Heb ook een paar dingen eruit gehaald die niet in TESTMAILEN staan.
Dat is een DB met alleen emailadressen

  1. <html>
  2. <head>
  3. <title>PHPMailer - MySQL Database - SMTP basic test with authentication</title>
  4. </head>
  5. <body>
  6.  
  7. <?php
  8.  
  9. error_reporting(E_ALL);ini_set('display_error',1);
  10.  
  11.  
  12.  
  13. //error_reporting(E_ALL);
  14. error_reporting(E_STRICT);
  15.  
  16. date_default_timezone_set('europe/amsterdam');
  17.  
  18. require_once('class.phpmailer.php');
  19. //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
  20.  
  21. $mail = new PHPMailer();
  22.  
  23. $body = file_get_contents('contents.html');
  24. $body = eregi_replace("[\]",'',$body);
  25.  
  26. $mail->IsSMTP(); // telling the class to use SMTP
  27. $mail->Host = "mail.home.nl";
  28. $mail->SMTPAuth = true; // enable SMTP authentication
  29. $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent
  30. $mail->Host = "mail.home.nl"; // sets the SMTP server
  31. $mail->Port = 25; // set the SMTP port for the GMAIL server
  32. $mail->Username = "MIJN@EMAILADRES"; // SMTP account username
  33. $mail->Password = "WACHTWOORD"; // SMTP account password
  34. $mail->SetFrom('MIJN@EMAILADRES', 'Piet test');
  35. $mail->AddReplyTo('MIJN@EMAILADRES', 'Piet test');
  36.  
  37. $mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication";
  38.  
  39. @MYSQL_CONNECT("SERVER ADRES","INLOGNAAM","WACHTWOORD");
  40. @mysql_select_db("DB_NAAM");
  41. $query = "SELECT emailadres FROM testmailen WHERE id=$id";
  42. $result = @MYSQL_QUERY($query);
  43.  
  44. while ($row = mysql_fetch_array ($result)) {
  45. $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
  46. $mail->MsgHTML($body);
  47. $mail->AddAddress($row["emailadres"]);
  48.  
  49. if(!$mail->Send()) {
  50. echo "Mailer Error (" . str_replace("@", "&#64;", $row["emailadres"]) . ') ' . $mail->ErrorInfo . '<br />';
  51. } else {
  52. echo "Message sent to :" . $row["emailadres"] . ' (' . str_replace("@", "&#64;", $row["emailadres"]) . ')<br />';
  53. }
  54. // Clear all addresses and attachments for next loop
  55. $mail->ClearAddresses();
  56. $mail->ClearAttachments();
  57. }
  58. ?>
  59.  
  60. </body>
  61. </html>


De title krijg ik wel in de bovenste balk, maar goed dat kan eigenlijk niet missen.
Offline Aar - 14/05/2011 16:56 (laatste wijziging 14/05/2011 17:02)
Avatar van Aar PHP interesse regel 10 t/m 15 kunnen weg. En voor de duidelijkheid mag er wel een spatie tussen de functie op regel 9.

Verder kunnen de @ weg voor regel 39 en 40. Je wilt errors zeker niet onderdrukken.
Verder is de SMTP van ziggo: smtp.ziggo.nl

Lijn 27 en 30 zijn dubbel. Eén ervan kan weg.

Lijn 28: SMTP authenticatie kan op false.

Je kan voor het PHP-script nog een stuk tekst plaatsen, kan ook erg handig zijn ter debugging.
Offline peerke59 - 14/05/2011 17:01 (laatste wijziging 14/05/2011 17:08)
Avatar van peerke59 MySQL interesse Ja er gebeurd wat, maar net datgene wat we niet willen, of juist wel.....
Ik krijg de volgende melding:

Deprecated: Function eregi_replace() is deprecated in D:\www\NAAMWEBSITE.nl\www\testmail\test_db_smtp_basic.php on line 19 Notice: Undefined variable: id in D:\www\NAAMWEBSITE.nl\www\testmail\test_db_smtp_basic.php on line 36 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\www\NAAMWEBSITE.nl\www\testmail\test_db_smtp_basic.php on line 39

verdere aanwijzingen had ik al geprobeerd (ook die false)
TEKST in het begin voor de php gezet en die komt in beeld.

Kan ik ergens laten zien of hij de database wel ziet, staan 8 emailadressen in.
Offline Aar - 14/05/2011 17:06 (laatste wijziging 14/05/2011 17:10)
Avatar van Aar PHP interesse Over die notice (welke niet de oorzaak is) is dit de truuk:
  1. $body = preg_match("/[\]/",'',$body);


Ik zie dat je dit doet:
  1. $query = "SELECT emailadres FROM testmailen WHERE id=$id";

Waar komt $id vandaan?
Wederom op lijn 42 is een @ overbodig.

Lijn 42 t/m einde PHP-script:
  1. $result = mysql_query($query);
  2. if ($result) {
  3. while ($row = mysql_fetch_array ($result)) {
  4. $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
  5. $mail->MsgHTML($body);
  6. $mail->AddAddress($row["emailadres"]);
  7.  
  8. if(!$mail->Send()) {
  9. echo "Mailer Error (" . str_replace("@", "&#64;", $row["emailadres"]) . ') ' . $mail->ErrorInfo . '<br />';
  10. } else {
  11. echo "Message sent to :" . $row["emailadres"] . ' (' . str_replace("@", "&#64;", $row["emailadres"]) . ')<br />';
  12. }
  13. // Clear all addresses and attachments for next loop
  14. $mail->ClearAddresses();
  15. $mail->ClearAttachments();
  16. }
  17. } else {
  18. echo "Fout opgetreden: ".mysql_error();
  19. }


Aanpassing: betere foutafhandeling.
Offline peerke59 - 14/05/2011 17:11 (laatste wijziging 14/05/2011 17:13)
Avatar van peerke59 MySQL interesse over die eerste code had ik ergens anders ook wel iets gelezen, kon geen kwaad
die $id zag ik ook staan in het voorbeeld, wist ook niet wat ik er mee moest
weet dus ook niet waar die vandaan komt.
zal nog even die ene @ weg halen en vanaf regel 41 veranderingen aanpassen.
Offline Aar - 14/05/2011 17:12
Avatar van Aar PHP interesse Haal die 'WHERE id=$id' dan maar uit je query.
Offline peerke59 - 14/05/2011 17:22
Avatar van peerke59 MySQL interesse WOW, hij geeft een vol scherm met foutmeldingen, eerste tekst heb ik zelf geplaatst voor de php:

TEST MAILEN CONTROLE Deprecated: Function eregi_replace() is deprecated in D:\www.WEBSITE.nl\www\testmail\test_db_smtp_basic.php on line 19 Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1350 Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1354 SMTP Error: Could not connect to SMTP host. Mailer Error (EMAILADRES1@home.nl) SMTP Error: Could not connect to SMTP host.
Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1350 Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1354 SMTP Error: Could not connect to SMTP host. Mailer Error (EMAILADRES2@home.nl) SMTP Error: Could not connect to SMTP host.
Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1350 Deprecated: Function set_magic_quotes_runtime() is deprecated in D:\www\WEBSITE.nl\www\testmail\class.phpmailer.php on line 1354 SMTP Error: Could not connect to SMTP host. Mailer Error (EMAILADRES3@home.nl) SMTP Error: Could not connect to SMTP host.

...........
EN ZO GAAT HET MAAR DOOR TOT DAT ALLE ADRESSEN ZIJN GEWEEST.
iK HEB MET HOOFDLETTERS EVEN DE GEGEVENS GEMARKEERD.
Offline Aar - 14/05/2011 17:23 (laatste wijziging 14/05/2011 17:29)
Avatar van Aar PHP interesse Welke phpMailer versie heb je gedownload? Volgens mij niet de PHP 5/6 versie?

Download deze eens:
http://sourcefo...p/download

Verder vind ik dit:
test_smtp_basic_no_auth.php
Een beter voorbeeld waarop je jouw script kan baseren, en zet $mail->SMTPDebug op 1.

Dan weet je hopelijk wat er verder fout gaat.
Offline peerke59 - 14/05/2011 17:28 (laatste wijziging 14/05/2011 17:29)
Avatar van peerke59 MySQL interesse v5.0.2 had ik nog als zip staan 

hij moet wel met de DB werken.
Offline Aar - 14/05/2011 17:30
Avatar van Aar PHP interesse hm...

$mail->SMTPDebug = 1; kan handig zijn.
Verder passen we de error_reporting aan naar:
error_reporting(E_ALL ^E_NOTICE);
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.293s