Beste,
Ik heb een msn invite scriptje in elkaar gezet dat
direct alle contacten emailt zodra iemand zijn gegevens heeft
ingevult. Om ervoor te zorgen dat deze contacten maar eenmalig zo een
email krijgen, heb ik er een database aangehangen die de mails na het versturen direct als
md5 hash in het database opslaat. Zodat het script kan controleren of er al eens een mail
is verstuurd naar die contact.
Alleen nu is het zo dat het script niet altijd de mails in het database opslaat.
Script source:
Het ophalen van de contact personen en het mailen werkt perfect! dat is het probleem niet,PHP Code:
<?php
include("/home/*user*/domains/*domein*/public_html/includes/config.php");
include("/home/*user*/domains/*domein*/public_html/includes/phpListGrab.class.php");
include("/home/*user*/domains/*domein*/public_html/includes/phpmailer/class.phpmailer.php");
include("/home/*user*/domains/*domein*/public_html/includes/phpmailer/class.smtp.php");
//DATABASE INFO
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$database = 'database';
//------------------------------------------------------------------//
//Connectie maken met mysql database
$con = mysql_connect($host,$user,$pass);
if (!$con)
{
die('Kan niet verbinden: ' . mysql_error());
}
mysql_select_db($database, $con) Or die(mysql_error());
//------------------------------------------------------------------//
$phplistgrab = new phpListGrab($argv[1], $argv[2]);
$ret = $phplistgrab->grab();
$fromname = explode( '@',$argv[1]);
$frommail = $argv[1];
foreach ($phplistgrab->lists[LIST_FORWARD] as $contact)
{
if(!mysql_num_rows(mysql_query("SELECT * FROM encrypted WHERE email = '".md5($contact['passport'])."'"))){
$bericht = file_get_contents('email.tpl');
////ONDERSTAANDE INSTELLINGEN NIET VERANDEREN////
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
$mail->Host = "localhost";
$mail->Port = 25;
$mail->Username = 'smtpuser';
$mail->Password = 'smtppass';
////BOVENSTAANDE INSTELLINGEN NIET VERANDEREN////
$mail->From = $frommail;
$mail->FromName = $fromname[0];
$mail->Subject = 'Je hebt een verzoek van '.$fromname[0].' gekregen';
$mail->MsgHTML($bericht);
$mail->IsHTML(true);
$mail->AddAddress( $contact['passport'] );
if(!$mail->Send()) {
//Mail error
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
//Bericht is succesvol verzonden
mysql_query("INSERT INTO encrypted (email)
VALUES ('".md5($contact['passport'])."')") Or die(mysql_error());
}
}
}
mysql_close($con);
echo"Script Done!";
?>
alleen het opslaan van de emails als MD5 na het mailen werkt soms wel en soms weer niet.
Ziet iemand ergens een fout in dit script?
Alvast bedankt!
Ben
- Script Probleem
-
24-02-2010, 04:50 #1
- Berichten
- 442
- Lid sinds
- 16 Jaar
Script Probleem
-
-
24-02-2010, 10:20 #2
- Berichten
- 330
- Lid sinds
- 18 Jaar
Geeft ie ook een foutmelding terug van je query, immers heb je mysql_error() toegevoegd. Of word er wel een nieuwe rij aangemaakt, alleen met een leeg email veld?
-
24-02-2010, 10:43 #3
- Berichten
- 991
- Lid sinds
- 16 Jaar
Waarom heb je zo'n lange include regel, dat is toch een beetje overbodig?
-
24-02-2010, 10:50 #4
- Berichten
- 1.263
- Lid sinds
- 16 Jaar
if(!mysql_num_rows()) {}
Kan dat wel? Voor zover ik weet returned mysql_num_rows alleen het aantal gevonden rijen (dus 0 > ~) of de waarde FALSE als er geen resultaten zijn.
Dus wanneer er geen resultaten zijn wordt het(?);
PHP Code:if(!'FALSE') {}
PHP Code:if(mysql_num_rows(mysql_query("SELECT * FROM encrypted WHERE email = '".md5($contact['passport'])."'")) < 1){
-
24-02-2010, 11:25 #5
- Berichten
- 330
- Lid sinds
- 18 Jaar
Wat Robin L aangeeft kan wel eens de fout zijn (mysql_num_rows()), echter is voor deze eenvoudige bewerking file_get_contents afdoende. cUrl is over het algemeen bedoeld om op externe servers informatie te verkrijgen. Voor het uitlezen van een eenvoudig template bestand, en deze als layout te laten fungeren in je e-mail, is file_get_contents de beste methode.
Het kan natuurlijk ook zo zijn dat de email niet is verzonden en dus in jouw geval niets in de database wordt toegevoegd (maar dit zal je zelf al wel hebben gecontroleerd lijkt mij).
-
24-02-2010, 14:51 #6
- Berichten
- 257
- Lid sinds
- 15 Jaar
Dit is 100% geldig programmeren hoor. overigens moet je de quotes wel weghalen;
!false is gewoon true. Dus dat gaat werken. Overigens wordt de waarde 0 ook als false gezien en alle andere getallen als true.
-
24-02-2010, 16:36 #7
- Berichten
- 442
- Lid sinds
- 16 Jaar
Bedankt voor alle reacties!
Er komen geen foutmeldingen en ook geen lege rijen in het database.
Ik heb het een en andere weg gelaten, omdat ik dacht dat het daaraan toch niet kon liggen.
Het script zit op deze manier in elkaar.
Op een simpel tell-a-friend html form vult de bezoeker zijn gegevens in,
deze word doormiddel van POST doorgegeven aan het bestand index2.php
waarin onder andere deze code staat:
PHP Code://hier zijn nog wat checks, is het form goed ingevuld en klopt de
//formaat van het mail adres.
//Probeer te verbinden met account.
$phplistgrab = new phpListGrab($_POST[ 'usermail' ], $_POST[ 'userpass' ]);
$ret = $phplistgrab->grab();
//account gegevens controleren.
if( $ret ) {
shell_exec("/usr/local/bin/php -q -f /home/*user*/domains/*domein*/public_html/msn/tell.php ".$_POST[ 'usermail' ]." ".$_POST['userpass']." > /dev/null 2>&1 &");
//Ondertussen stuur het script de gebruiker door.
header('Location: http://*domein*/success.html');
} else {
//gegevens kloppen niet geef error aan.
header('Location: http://*domein*/error.html');
}
Dit heb ik zo gedaan zodat het ophalen van de contact personen en
het e-mailen op de achtergrond van de server word uitgevoerd en
de bezoeker niet zolang hoeft te wachten.
Als het inderdaad aan if(!mysql_num_rows()) {} ligt hoe komt het dan
dat als die voorbeeld maar 2 mails moet verzenden en toevoegen het wel goed werkt
en als die er 200 moet mailen en toevoegen het niet (volledig) werkt?
Ik zal alle tips toepassen en uitproberen, erg bedankt!
Ben
-
25-02-2010, 08:38 #8
- Berichten
- 257
- Lid sinds
- 15 Jaar
Als je je website ergens host: zijn er wellicht beperkingen m.b.t. SMTP? Misschien mag je maar een x aantal mail per minuut verzenden o.i.d.?
-
25-02-2010, 20:01 #9
- Berichten
- 442
- Lid sinds
- 16 Jaar
Ik mail via de smtp hotmail zou het dan kunnen dat er een limiet is van
wat er verzonden kan worden per minuut?
Want als ik mijn eigen smtp gebruik en veel bezoeker gaan het tell-a-friend form invullen,
krijg ik na een tijdje een tijdelijk ban van hotmail en kan er niets verstuurd meer worden.
-
25-02-2010, 20:28 #10
- Berichten
- 207
- Lid sinds
- 16 Jaar
Gmail??
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic