php script voor automatisch versturen verjaardagsmail

Status
Niet open voor verdere reacties.
dat heeft dus temaken met dat de datums niet gelijk zijn. waarschijnlijk geeft bijv de ene weer: 5-10-07
en de andere: 05-10-2007 (is een voorbeeld)
 
dat heeft dus temaken met dat de datums niet gelijk zijn. waarschijnlijk geeft bijv de ene weer: 5-10-07
en de andere: 05-10-2007 (is een voorbeeld)

Ik bedoelde eigenlijk na jouw aanpassing. Mijn datum had ik voor de test al aangepast omdat er toevallig van de vereniging vandaag niemand jarig is.
 
Het werkt

Ik heb een paar kleine aanpassingen gedaan en de mail komt nu aan.
Dit is het script. Ik heb de voorwaarde lidactueel in het zoekgedeelte gezet.

PHP:
<?php
//Titel: Felicitatiemail AV de Liemers
//check for brithdays today


 setlocale (LC_ALL, 'nl_NL');

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file

//$db_tabel="tblid";//Where mail and date from the users 
$message="Namens AV de Liemers ....bla bla bla..."; //HTML enable. Dont use " but \"
$from="ledenadministratie@avdeliemers.nl";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$reply_to="webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$subject="Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \"
$date_f="Y-m-d";  //User http://nl2.php.net/date

$sql = 'SELECT * FROM `tblid` WHERE `lidactueel` = "Ja" ';
$query = mysql_query($sql) or die(mysql_error());

while($lid = mysql_fetch_object($query))
	{
	$mail = htmlspecialchars($lid->lidmail);
	$date_user=htmlspecialchars($lid->lidgeboortedatm);
	$date_now=date($date_f);
	//SENDING MAIL
	mail($mail,$subject,$message,"From: ".$from."\nContent-Type: text/html; charset=UTF-8\nMIME-Version: 1.0\nReply-To: ".$reply_to."");
	}
?>

:thumb::thumb:

Rob
 
vervolg

Is het ook mogelijk om een attachment (foto of document mee te sturen), die in een bepaalde map wordt gezet op de server. De felicitatiekaart van de vereniging is nu een foto ?
:)
 
uupload je foto en zet in de mesage <img src="linknaarfoto"> oftewel gewoon html gebruiken ;)
 
Mailbericht

Cronjob

Van de engelse wikipedia.

Dus gewoon een taak die uitgevoert wordt op basis van tijd.

De rij die gebruikt moet worden is lidgeboortedatum.

Dingen die je eerst moet doen is de datum controleren, daarna moet je een query opstellen die kijkt welke actieve leden aangeroepen moeten worden.

Ik vraag me wel af naar welk mailadres die mailtjes worden gestuurd aangezien je geen rij voor een emailadres geeft.

@ Tha Devil,

Kun je mij verder helpen met het script.
Als ik het script laat draaien (ook door de Cron job), krijg ik al een mail als enkel in het veld lidactueel "Ja" staat.
Een bijlage meesturen lukt ook niet met de html regel <img src="../images/felicitatie.jpg"> die ik uitgeprobeerd heb.
Kijk even naar bovenstaand script om de draad op te pikken.

Rob
 
Laatst bewerkt:
Het hangt van je bijlage af, als dat inderdaad een afbeelding is dan zul je het complete adres moeten invullen. Dus met http:// etc

PHP:
<img src="http://www.avdeliemers.nl/images/felicitatie.jpg" />
Zo dus, maar dan moet je wel de afbeelding geupload hebben (Ik kan hem op die link namelijk niet vinden. :(

De reden dat jij standaard al een mail krijgt bij "Ja" komt omdat er geen controle plaats vindt op de datum.

Waarschijnlijk moet je dit gebruiken.
PHP:
<?php 
//Titel: Felicitatiemail AV de Liemers 
//check for brithdays today 


setlocale (LC_ALL, 'nl_NL'); 

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file 

//$db_tabel="tblid";//Where mail and date from the users 
$message="Namens AV de Liemers ....bla bla bla..."; //HTML enable. Dont use " but \" 
$from="ledenadministratie@avdeliemers.nl";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$reply_to="webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$subject="Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \" 
$date_f="Y-m-d";  //User http://nl2.php.net/date 

$sql = 'SELECT * FROM `tblid` WHERE `lidactueel` = "Ja" '; 
$query = mysql_query($sql) or die(mysql_error()); 

while($lid = mysql_fetch_object($query)) { 
  $mail = htmlspecialchars($lid->lidmail); 
  $date_user=htmlspecialchars($lid->lidgeboortedatm); 
  $date_now=date($date_f);
  //Controle op datum
  if($date_now == $date_user) {  
    //SENDING MAIL 
    mail($mail,$subject,$message,"From: ".$from."\nContent-Type: text/html; charset=UTF-8\nMIME-Version: 1.0\nReply-To: ".$reply_to.""); 
  }
} 
?>
Mocht dat niet werken dan moet je even kijken hoe $date_user en $date_now er uit zien, die moeten namelijk gelijk zijn wil er een mailtje worden gestuurd.
 
@ Tha Devil

Ik heb even een aparte tabel opgezet met iets andere namen.
Het script is nu:
PHP:
<?php
//Titel: Felicitatiemail AV de Liemers
//check for brithdays today


setlocale (LC_ALL, 'nl_NL');

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file

//$db_tabel="tblid";//Where mail and date from the users
$message="Namens AV de Liemers willen we je hartelijk feliciteren met je verjaardag"; //HTML enable. Dont use " but \"
$from="ledenadministratie@avdeliemers.nl";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$reply_to="webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$subject="Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \"
$date_f="Y-m-d";  //User http://nl2.php.net/date

$sql = 'SELECT * FROM `tbverjaardag` WHERE `lidactueel` = "Ja" ';
$query = mysql_query($sql) or die(mysql_error());

while($lid = mysql_fetch_object($query)) {
  $mail = htmlspecialchars($lid->Email);
  $date_user=htmlspecialchars($lid->Geboortedatm);
  $date_now=date($date_f);
  //Controle op datum
  if($date_now == $date_user) {  
    //SENDING MAIL
    mail($mail,$subject,$message,"From: ".$from."\nContent-Type: text/html; charset=UTF-8\nMIME-Version: 1.0\nReply-To: ".$reply_to."");
  }
}
?>

Waar moet ik de html voor de mee te sturen bijlage plaatsen (heb ik nu felicitatiemail.jpg genoemd en staat in de map /images)?
 
Laatst bewerkt:
PHP:
<?php 
//Titel: Felicitatiemail AV de Liemers 
//check for brithdays today 


setlocale (LC_ALL, 'nl_NL'); 

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file 

//$db_tabel="tblid";//Where mail and date from the users 
$message="Namens AV de Liemers willen we je hartelijk feliciteren met je verjaardag"; //HTML enable. Dont use " but \" 
$message .= "<br /><img src=\"http://www.avdeliemers.nl/images/felicitatie.jpg\" alt=\"Gefeliciteerd met je verjaardag\"/>";
$from="ledenadministratie@avdeliemers.nl";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$reply_to="webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$subject="Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \" 
$date_f="Y-m-d";  //User http://nl2.php.net/date 

$sql = 'SELECT * FROM `tbverjaardag` WHERE `lidactueel` = "Ja" '; 
$query = mysql_query($sql) or die(mysql_error()); 

while($lid = mysql_fetch_object($query)) { 
  $mail = htmlspecialchars($lid->Email); 
  $date_user=htmlspecialchars($lid->Geboortedatm); 
  $date_now=date($date_f); 
  //Controle op datum 
  if($date_now == $date_user) {   
    //SENDING MAIL 
    mail($mail,$subject,$message,"From: ".$from."\nContent-Type: text/html; charset=UTF-8\nMIME-Version: 1.0\nReply-To: ".$reply_to.""); 
  } 
} 
?>
Zo dus.

Overigens heb je hem niet felicitatiemail.jpg genoemd maar gewoon felicitatie.jpg (http://www.avdeliemers.nl/images/felicitatie.jpg)

Mocht hij nu niets versturen terwijl de datums wel gelijk horen te zijn moet je dus even de variabelen $date_now en $date_user echoën.
 
@ Tha Devil

Volgens mij werkt het nu.
Ik heb mezelf even jarig gemaakt vandaag (2007-11-03) en ook
$date_now en $date_user ge-echoed. Als ik vervolgens in de database
lidactueel verander in Nee, krijg ik geen mail en geen echo.
Als ik deze weer in Ja verander, krijg ik de mail. De bijlage komt netjes mee.
Ook even een ander mailadres getest en de mail komt daar ook binnen!
Ik ga nu met een aantal bekende leden een testsessie houden, voordat ik per ongeluk net als
gisteren iedereen een felicitatie stuur. Vond de ledenadministratie niet echt leuk :o
Als dat goed gaat, schakel ik de Cron Job pas weer in.

Mag ik je wederom heel hartelijk danken.....:thumb::thumb:

Rob
 
Laatst bewerkt:
@ Tha Devil

Hallo,
Er zit toch nog een foutje in.
De geboortedatum (date_user) en de huidige datum (date_now) kunnen natuurlijk nooit gelijk zijn aan elkaar (tenzij je vandaag geboren bent).
Alleen de dag en de maand komen overeen.
Hoe moet dat aangepast worden in het script? :eek:

Rob
 
PHP:
<?php 
//Titel: Felicitatiemail AV de Liemers 
//check for brithdays today 


setlocale (LC_ALL, 'nl_NL'); 

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file 

//$db_tabel="tblid";//Where mail and date from the users 
$message="Namens AV de Liemers willen we je hartelijk feliciteren met je verjaardag"; //HTML enable. Dont use " but \" 
$message .= "<br /><img src=\"http://www.avdeliemers.nl/images/felicitatie.jpg\" alt=\"Gefeliciteerd met je verjaardag\"/>";
$from="ledenadministratie@avdeliemers.nl";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$reply_to="webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \" 
$subject="Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \" 

//Datum van vandaag instellen. 
$date_now=date("m-d");  //Uitleg: http://nl2.php.net/date

$sql = 'SELECT * FROM `tbverjaardag` WHERE `lidactueel` = "Ja" '; 
$query = mysql_query($sql) or die(mysql_error()); 

while($lid = mysql_fetch_object($query)) { 
  $mail = htmlspecialchars($lid->Email); 
  $date_user = htmlspecialchars($lid->Geboortedatm);
  //Gebruikersdatum in stukjes hakken
  $date_user = explode("-", $date_user);
  //Datum zonder het jaar onthouden
  $date_user = "$date_user[1]-$date_user[2]";
  //Controle op datum 
  if($date_now == $date_user) {   
    //SENDING MAIL 
    mail($mail,$subject,$message,"From: ".$from."\nContent-Type: text/html; charset=UTF-8\nMIME-Version: 1.0\nReply-To: ".$reply_to.""); 
  } 
} 
?>
Dan passen we toch gewoon de $date_now aan, daar halen we de Y van jaar af zodat we alleen nog de maand en de dag overhouden.

Vervolgens gaan we $date_user strippen zodat we daar ook alleen de maad en dag overhouden.
 
@ Tha Devil

Het script werkt.
Ik ga nu de Cron Job instellen op de host server.
Wel zou ik graag van elk verzonden mailtje een melding willen.
Het liefst anoniem of via een BCC.
Ik neem aan dat dat via een extra variabele in het mailscript kan?

Rob :cool:
 
Dan passen we het een en ander aan.
PHP:
<?php 
//Titel: Felicitatiemail AV de Liemers 
//check for brithdays today 


setlocale (LC_ALL, 'nl_NL'); 

  include( 'connect_db_strato_avl.php' ); //replace connect.php to you're connection file 

//$db_tabel="tblid";//Where mail and date from the users 
$afzender = "Ledenadministratie AV De Liemers <ledenadministratie@avdeliemers.nl>";    //Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$antwoord_adr = "webmaster.rob@avdeliemers.nl";//Like "JesseD.nl <admin@jessed.nl>". Dont use " but \"
$onderwerp = "Hartelijk gefeliciteerd"; //HTML disable. Dont use " but \" 
//Bericht in HTML formaat
$bericht = '
<html>
<head>
 <title>'. $onderwerp .'</title>
</head>
<body>
Namens AV de Liemers willen we je hartelijk feliciteren met je verjaardag
<br />
<img src="http://www.avdeliemers.nl/images/felicitatie.jpg" alt="Gefeliciteerd met je verjaardag" />
</body>
</html>'; 

//Datum van vandaag instellen. 
$datum_huidig = date("m-d");  //Uitleg: http://nl2.php.net/date 

$sql = 'SELECT * FROM `tbverjaardag` WHERE `lidactueel` = "Ja" '; 
$query = mysql_query($sql) or die(mysql_error()); 

while($lid = mysql_fetch_object($query)) { 
  $naar = htmlspecialchars($lid['Email']); 
  $datum_lid = htmlspecialchars($lid['Geboortedatm']); 
  //Gebruikersdatum in stukjes hakken 
  $datum_lid = explode("-", $datum_lid); 
  //Datum zonder het jaar onthouden 
  $datum_lid = "$datum_lid[1]-$datum_lid[2]"; 
  //Controle op datum 
  if($datum_huidig == $datum_lid) {    
    //Headers
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    // Additional headers
    $headers .= 'To: '. $lid['lidnaam'] .' <'. $naar .">\r\n";
    $headers .= 'From: '.$afzender ."\r\n";
    $headers .= 'Bcc:'. $antwoord_adr ."\r\n"; 
    mail($naar,$onderwerp,$bericht, $headers);
  } 
} 
?>
Meteen even nederlandse naamgeving gebruikt en het mailtje volledig HTML gemaakt.

De BCC wordt nu naar het adres in $antwoord_adr gestuurd.
 
@ Tha Devil

Ziet er goed uit.
Zo kan ik netjes in de gaten houden of alles correct wordt verzonden.
Alvast bedankt, morgenvroeg eens kijken of het ook heeft gewerkt vannacht.

Rob :cool:
 
@ Tha Devil

Hallo,

Het eerste script werkt goed, de vertaling werkte niet.
Ik heb de eerste ook deels naar het nederlands vertaald en dan gaat het ook fout.
Denk dat het met het datumformaat te maken heeft.
Ook heb ik geprobeerd de naam van de geadresseerde (leuke geste), zoals in het tweede script staat over te zetten, maar dat lukt niet.
Cron Job werkt ook nog niet, maar dat is een kwestie van uitproberen en zoeken op
internet.

Rob :cool:
 
$datum_lid = htmlspecialchars($lid['Geboortedatm']);


Klopt dat wel?
 
@ Tha Devil

$datum_lid = htmlspecialchars($lid['Geboortedatm']);


Klopt dat wel?

Die had ik al veranderd in Geboortedatum
(Bij een eerdere ledentabel was er wel een veldnaam geboortedatm)

Rob
 
Bedankt voor dit handige script !
Nu wil ik het graag uitbreiden met de mogelijkheid om de naam van de jarige op te nemen in de mail. Deze naam staat in de tabel tbllid.
Hoe doe ik dit ?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan