Reprenons notre petite série "Message post mortem" : dans le dernier article, nous avons créé le script qui appelle une fois par mois notre fichier incaseofdeath.php. Aujourd'hui, nous allons faire la première partie du fichier : la gestion vie / mort.

En route !

Pré-requis :

  1. Structures de base du langage PHP (array et structures itératives) ;
  2. Serveur configuré correctement pour l'envoi de mails.

Étape 2 : le corps du fichier

Une fonction mail

Premièrement, nous allons faire une fonction qui permet l'envoi d'un mail facilement. Je ne vais pas détailler, vous pouvez faire cela très simplement avec mail() ou un peu plus compliqué pour pouvoir envoyer un message au format HTML, ce qui facilitera le clic sur le lien quand vous recevrez votre demande de "confirmation de vie".

//********************************************
//Permet l'envoi d'un mail via une fonction simple.
//********************************************
function envoimail($to,$subject,$message)
{
	// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

	// En-têtes additionnels
	$headers .= 'From: Webmaster ' . "\r\n";//Remplacez par une adresse sur le domaine de votre site pour ne pas voir votre mail arriver dans les indésirables.

	mail($to, $subject, $message, $headers);
}

Le fichier

Il n'y a rien de bien compliqué ici, je mets directement le fichier. Lisez les commentaires si nécessaire !
Notons simplement que si le fichier alive contient 0 le premier du mois, c'est que vous n'avez pas validé votre mail le dernier mois ; en conséquence l'alerte se déclenchera.

//Vérifier que l'appel du fichier est correctement sécurisé. Voir la première partie.
if(!defined('CHECK_DEATH'))
	exit();

//Attention, je rajoute un espace devant le @ pour corriger un bug joomla! Dans votre script, l'adresse mail doit être correcte !
$Envois=array(
'monmeilleurami@sonfai.fr'=>"

Salut mon meilleur ami !
Si tu reçois ce mail, c'est que je suis décédé, ou alors je n'ai pas donné signe de vie depuis un mois, ce qui revient presque au même. Le mot de passe pour accéder à mon super site est 'monsuperpasswordultracrypté'.

", 'mameilleureamie@sonfai.fr'=>'

Crève, je te déteste de toute façon.

' ); if(file_get_contents('alive.txt')==1) {//On a donné signe de vie le dernier mois, on relance donc la machine ! file_put_contents('alive.txt',0); envoimail('This email address is being protected from spambots. You need JavaScript enabled to view it.','Still alive ?','

Yo Moi même !
Heureux de constater que tu lis ce mail ;) Clique ici pour garder tous les électrons au courant.'); } else {//Et merde, il semblerait que je sois mort. On va donc envoyer tous les mails demandés foreach($Envois as $Dest=>$PostMortem) { envoimail($Dest,"Message post mortem de VOTREPSEUDO",$PostMortem); } }

Et voilà, la base du script est opérationnelle.
Il ne reste plus qu'à faire en sorte que le clic sur le lien dans le mail mette à 1 le curseur du fichier alive.txt. Pour cela, il suffit de placer en tout début de fichier le code suivant : (pensez bien à le mettre avant le test sur defined() !)

if(isset($_GET['IsAlive']))
{
	file_put_contents('../admin/raw/alive',1);
	echo '

Parfait, heureux de l\'apprendre ! Passe un bon mois :)

'; exit(); }

Et cette fois, tout est opérationnel ! Dans le prochain et dernier volet, nous aborderons l'aspect sécurité.

Pour les vilains fainéants, je remets l'intégralité du script :

//********************************************
//Permet l'envoi d'un mail via une fonction simple.
//********************************************
function envoimail($to,$subject,$message)
{
	// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

	// En-têtes additionnels
	$headers .= 'From: Webmaster ' . "\r\n";//Remplacez par une adresse sur le domaine de votre site pour ne pas voir votre mail arriver dans les indésirables.

	mail($to, $subject, $message, $headers);
}

if(isset($_GET['Alive']))
{
	file_put_contents('../admin/raw/alive',1);
	echo '

Parfait, heureux de l\'apprendre ! Passe un bon mois :)

'; exit(); } //Vérifier que l'appel du fichier est correctement sécurisé. Voir la première partie. if(!defined('CHECK_DEATH')) exit(); //Attention, je rajoute un espace devant le @ pour corriger un bug joomla! Dans votre script, l'adresse mail doit être correcte ! $Envois=array( 'monmeilleurami@sonfai.fr'=>"

Salut mon meilleur ami !
Si tu reçois ce mail, c'est que je suis décédé, ou alors je n'ai pas donné signe de vie depuis un mois, ce qui revient presque au même. Le mot de passe pour accéder à mon super site est 'monsuperpasswordultracrypté'.

", 'mameilleureamie@sonfai.fr'=>'

Crève, je te déteste de toute façon.

' ); if(file_get_contents('alive.txt')==1) {//On a donné signe de vie le dernier mois, on relance donc la machine ! file_put_contents('alive.txt',0); envoimail('This email address is being protected from spambots. You need JavaScript enabled to view it.','Still alive ?','

Yo Moi même !
Heureux de constater que tu lis ce mail ;) Clique ici pour garder tous les électrons au courant.'); } else {//Et merde, il semblerait que je sois mort. On va donc envoyer tous les mails demandés foreach($Envois as $Dest=>$PostMortem) { envoimail($Dest,"Message post mortem de VOTREPSEUDO",$PostMortem); } }