IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

TACHE CRON ENVOI DE MAIL AUTOMATIQUE


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut TACHE CRON ENVOI DE MAIL AUTOMATIQUE
    Bonsoir,

    Voilà mon problème. Je ne suis pas très familier de sql, des tables etc...
    J'ai créé une tache cron qui exécute une page web de mon site toute les heures. C'est un script php qui fait ceci, pour résumer simplement :

    le script php parse une page web qui dit ou non si il y a une vigilance de fortes pluies dans ma région.
    Si le script php renvoie la valeur comme quoi il y a une alerte de fortes pluies, ca m'envoie un email. Le problème, c'est que la tache cron exécutant le script toute les heures, je vais recevoir 1 mail par heure et si l'alerte de fortes pluies dure 3 jours, je vais recevoir XXX emails. J'ai lu à droite à gauche sur le net et sur ce forum qu'il faudrait un script qui charge une table SQL, qui mette la valeur 1 si le mail a déjà été envoyé une fois mais l'inconvénient, je ne comprends rien et je n'arrive pas à trouver un seul exemple qui me guide dans mon script php. Voici le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    <? $texte=file_get_contents("http://www.meteo.fr/temps/domtom/La_Reunion/EMD/fortes_pluies/fortes_pluies.html");
    $debut="<body";
    $texte_a_inserer=strstr($texte,$debut);
    $texte_a_inserer=explode("</body>",$texte_a_inserer); ?>
              <? $result=substr($texte_a_inserer[0], 0, 5000000);
    		  $trouve1=strpos($result,"N’");
    		  if($trouve1==false){
              $mon_email = "XXX@orange.fr";
        // Headers
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= "From : <".$mon_email.">" ;
        // Sujet
        $subject = "VIGILANCE FORTES PLUIES EN COURS";
        // Message
        $message = "ALERTE AUTOMATIQUE DE REUNIONBYSAT.COM : " . $_SERVER['HTTP_REFERER'] . "";
        //Destinataire
        $to = $mon_email;
        // Envoie de l'email
        mail($to,$subject,$message,$headers) 
    		  ;}
    		  ?>
    **********************************
    Voilà, le script et la tache cron marchent nikel, je reçois mon mail si la condition est remplie, mais plusieurs fois. J'aimerais recevoir le mail une seule fois par jour par exemple. Pouvez-vous m'aider, me guider ? Merci beaucoup.

    Christophe from Reunion Island

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pas obligé d'avoir une base de donnée juste pour ça. un "cookie" suffit.

    exemple en speudo code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $coockie = '/tmp/coockie_meteo'; // sinon dans /var si tu redémare souvent cette machine
     
    $etat_precentant = file_exists($coockie)
     
    $nouvel_etat = ma_procedure_qui_va_lire_meteo_france_et_qui_marche_bien()
     
    si ( ( 1 == $nouvel_etat )  XOR  ( 1  == $etat_precedant) )
    {
        // envoyer un mail
       si ( 1 == $nouvel_etat )
      {
       envoyer_un_mail('il pleut');
      }
      sinon
      {
       envoyer_un_mail('fin de l alerte ');
      }
    }
     
    // mise à jour du coockie
    touch( $coockie ); // on le crée dans tous les cas
     
    if ( 0 == $nouvel_etat )
    {
      unlink($coockie);
    }
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Tu peux utiliser un fichier texte (cela t'évitera d'employer une bdd juste pour ça) et enregistrer la date comme valeur témoin, ainsi tu n'auras qu'un mail par jour :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    $texte=file_get_contents("http://www.meteo.fr/temps/domtom/La_Reunion/EMD/fortes_pluies/fortes_pluies.html");
    $debut="<body";
    $texte_a_inserer=strstr($texte,$debut);
    $texte_a_inserer=explode("</body>",$texte_a_inserer); 
    $result=substr($texte_a_inserer[0], 0, 5000000);
    $trouve1=strpos($result,"N’");
     
    if($trouve1==false)
    	{
     
    		$date = date('Ymd');
    		$date_fichier = is_file('date_envoi_alert.txt') ? file_get_contents('date_envoi_alert.txt') : null;
     
    		if ($date != $date_fichier)
    			{
     				file_put_contents('date_envoi_alert.txt',$date);
     
    				$mon_email = "XXX@orange.fr";
    				// Headers
    				$headers  = 'MIME-Version: 1.0' . "\r\n";
    				$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    				$headers .= "From : <".$mon_email.">" ;
    				// Sujet
    				$subject = "VIGILANCE FORTES PLUIES EN COURS";
    				// Message
    				$message = "ALERTE AUTOMATIQUE DE REUNIONBYSAT.COM : " . $_SERVER['HTTP_REFERER'] . "";
    				//Destinataire
    				$to = $mon_email;
    				// Envoie de l'email
    				mail($to,$subject,$message,$headers) ;
    			}
    	}
    **********************************
    Avec ce code, normalement la valeur de la date d'envoi du mail sera enregistrée dans un fichier nommé "date_envoi_alert.txt" et tu ne recevras qu'un mail par jour.

    EDIT J'avais pas vu la réponse de gene69, ça te feras deux solutions

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/08/2014, 02h26
  2. [CRON] Envoi de mail automatique
    Par a_me dans le forum Serveurs (Apache, IIS,...)
    Réponses: 10
    Dernier message: 20/10/2007, 12h17
  3. [VB6]envoie de mail automatiquement
    Par riesseg dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/04/2006, 14h14
  4. Réponses: 14
    Dernier message: 17/11/2005, 17h16
  5. Envoi de mail automatique avec Visual C++
    Par cza dans le forum MFC
    Réponses: 2
    Dernier message: 22/02/2005, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo