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

Langage PHP Discussion :

rechercher email par date php imap


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut rechercher email par date php imap
    J'arrive à lire mes mails à partir de php en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      $mbox = imap_open ("{mail.3d2plus.fr:143/imap}INBOX", "bla@bla.fr", "mdpass") 
    	 or die("can't connect: " . imap_last_error()); 
     
     echo "Entetes de mail : ";
      $headers = imap_headers ($mbox);
      if ($headers == false) {
        echo "Erreur !\n";
      } else {
        while (list ($key,$val) = each ($headers)) {
            echo $val."<br>\n";
        }
      }
     
      imap_close($mbox);
    Mais je voudrais savoir comment rechercher un mail par sa date et son heure : exemple : comment voir tout les mails que j'ai eu aujourdui ??

  2. #2
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Tu peux parcourire tes mails et n'afficher que ceux qui portent la date d'aujourd'hui ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  3. #3
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    C'est ce que je voudrai faire mais le problème c'est que je ne sais pas comment faire pour récupérer la date d'un mail dans une variable

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Utilise imap_headerInfo (ou imap_header) paramètre "date"
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    Ok merci.

    J'ai réussi a récupérer la date d'un message dont je connais l'id avec

    object imap_headerinfo ( resource $imap_stream , int $msg_number [, int
    $fromlength=0 [, int $subjectlength=0 [, string $defaulthost=NULL ]]] )


    On est obligé de fournir le $msg_number, mais comment faire quand on ne le connait pas si on veut récupérer un message à une date précise?

  6. #6
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Citation Envoyé par RideKick Voir le message
    Tu peux parcourire tes mails et n'afficher que ceux qui portent la date d'aujourd'hui
    Je ne me suis pas penché en profondeur sur les fonctions imap_ mais me semble que ce soit la seule solution car les id de mails changent quand de nouveaux arrivent.

    Après semblerait qu'il faille une BDD et indexer les mails (du coups tu refais un webmail quasiment)
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  7. #7
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Suffit de lister les mails et ensuite de faire le tri...

    Exemple :
    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
     
    $imap_server = "{mail.toto.com}"; 
      $imap_user = "user"; 
      $imap_pass = "pass"; 
      $mbox = imap_open("{$imap_server}INBOX", $imap_user, $imap_pass); 
      $original_order = $mbox; //this is important line to add before reordering the messages. 
      $sorted_mbox = imap_sort($mbox, "SORTDATE", 0); 
      $totalrows = imap_num_msg($mbox); 
      $startvalue = 0; 
      while ($startvalue < $totalrows) { 
        $header = imap_header($mbox, $sorted_mbox[$startvalue]); 
        $mid_1 = $header->message_id; 
        $i = 0; 
        while ($i < ($totalrows + 1)) { 
          $header1 = imap_header($original_order, $i); 
          $mid_2 = $header1->message_id; 
          if ($mid_1 == $mid_2) { 
            $id = $i; 
          } 
          $i ++; 
        } // now the ids are store truely & uniquely in the $id variable to call out 
        $startvalue++; 
      }
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  8. #8
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    blueice j'ai testé ton code et j'ai un Bad message number à la ligne 197 correspondant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $header1 = imap_header($original_order, $i);

  9. #9
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    la date est au format : 5 Feb 2009 11:54:53 +0100Thu
    Comment la comparer avec une date au format 2009-02-05 ou alors
    comment afficher la date à ce format?

    Merci

  10. #10
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Un exemple complet :
    Code php : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?php
    $dateimap = date('j M Y H:i:s OD');
    $tab = substr($dateimap, 0, 25);
    $str2 = strtotime($tab);
    $lang = array(
    'DATE_JANUARY' => 'Janvier',
    'DATE_FEBRUARY' => 'Février',
    'DATE_MARCH' => 'Mars',
    'DATE_APRIL' => 'Avril',
    'DATE_MAY' => 'Mai',
    'DATE_JUNE' => 'Juin',
    'DATE_JULY' => 'Juillet',
    'DATE_AUGUST' => 'Aout',
    'DATE_SEPTEMBER' => 'Septembre',
    'DATE_OCTOBER' => 'Octobre',
    'DATE_NOVEMBER' => 'Novembre',
    'DATE_DECEMBER' => 'Décembre',
    'DATE_MONDAY' => 'Lundi',
    'DATE_TUESDAY' => 'Mardi',
    'DATE_WEDNESDAY' => 'Mercredi',
    'DATE_THURSDAY' => 'Jeudi',
    'DATE_FRIDAY' => 'Vendredi',
    'DATE_SATURDAY' => 'Samedi',
    'DATE_SUNDAY' => 'Dimanche'
    );
    function dates($timestamp,$model,$lang)
    {
    	// timestamp = la date a formater en base de timestamp unix
    	// model = le modèle remplace des variables standards par leur valeur
    	// exemple : pour une date "Mercredi 31 Juillet 2008 à 21:30"
    	// le modele sera : "{LONG_DAY} {DAY} {LONG_MONTH} {LONG_YEAR} à {HOUR}:{MIN}"
    	// il est complètement modulable
    	// lang = le fichier de langue courant
     
    	// tableau de base
    	$transDate = array(
    	'SEC' => date('s',$timestamp),
    	'MIN' => date('i',$timestamp),
    	'HOUR' => date('H',$timestamp),
    	'DAY' => date('d',$timestamp),
    	'MONTH' => date('m',$timestamp),
    	'LONG_YEAR' => date('Y',$timestamp),
    	'SHORT_YEAR' => date('y',$timestamp),
    	'LONG_DAY' => $lang['DATE_'.strtoupper(date('l',$timestamp))],
    	'SHORT_DAY' => substr($lang['DATE_'.strtoupper(date('l',$timestamp))],0,3),
    	'LONG_MONTH' => $lang['DATE_'.strtoupper(date('F',$timestamp))],
    	'SHORT_MONTH' => substr($lang['DATE_'.strtoupper(date('F',$timestamp))],0,4),
    	);
     
    	// remplacements dans le modele
    	$model = str_replace('{SEC}',$transDate['SEC'],$model);
    	$model = str_replace('{MIN}',$transDate['MIN'],$model);
    	$model = str_replace('{HOUR}',$transDate['HOUR'],$model);
    	$model = str_replace('{DAY}',$transDate['DAY'],$model);
    	$model = str_replace('{MONTH}',$transDate['MONTH'],$model);
    	$model = str_replace('{LONG_YEAR}',$transDate['LONG_YEAR'],$model);
    	$model = str_replace('{SHORT_YEAR}',$transDate['SHORT_YEAR'],$model);
    	$model = str_replace('{LONG_DAY}',$transDate['LONG_DAY'],$model);
    	$model = str_replace('{SHORT_DAY}',$transDate['SHORT_DAY'],$model);
    	$model = str_replace('{LONG_MONTH}',$transDate['LONG_MONTH'],$model);
    	$model = str_replace('{SHORT_MONTH}',$transDate['SHORT_MONTH'],$model);
     
    	// retour
    	return $model;
    }
    echo '<strong>Avant :</strong> '.$dateimap.'<br />';
    echo '<strong>Après :</strong> '.dates($str2, "{LONG_YEAR}-{MONTH}-{DAY} {HOUR}:{MIN}:{SEC}", $lang);
    ?>
    $dateimap = la date actuelle ex : 5 Feb 2009 17:19:50 +0100Thu
    A toi d'adapter en fonction de ce que tu souhaites.
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  11. #11
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Je me suis penché sur ce que tu souhaitais, voici la solution avec gmail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $imap_user = ""; 
      $imap_pass = ""; 
     
    $mbox = imap_open ("{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX", $imap_user, $imap_pass);
      $msgsorted = imap_sort($mbox, SORTDATE, 1);
     
      foreach($msgsorted as $message) {
      $header = imap_header($mbox, $message);
      $formatdate = date ('j M Y', $header->udate);
      echo "{$header->subject} - $formatdate<br />\n";
      }
    A toi d'adapter en fonction de ce que tu souhaites.
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  12. #12
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    en faisant une modification de $formatdate = date ("Y-m-d", $header->udate);
    et bien ça marche.

    Merci tu m'as bien aidé, j'arrive maintenant à afficher les dates au format que je veux.

  13. #13
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    Maintenant j'arrive a récupérer la date, l'heure, le sujet etc...
    Merci pour votre aide.

    Mais j'aimerai savoir comment faire pour supprimer un mail ??

  14. #14
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Suffit de lire la doc
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  15. #15
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 487
    Points : 5 134
    Points
    5 134
    Par défaut
    Tu m'as ôté les mots de la bouche....
    -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_SIGNATURE -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
    Dans la mesure du possible, essayez de montrer votre problème en situation réelle en nous donnant une url, que l'on puisse tester.
    Pensez également à cocher

    Aucun problème ne doit être résolu en MP (Message Privé) le forum est là pour ça.

    Dimension Internet

  16. #16
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    Je vais utiliser le imap_mais mon problème est que je voudrais savoir comment retrouver le numéro d'un email pour utiliser le imap_delete ??
    (sans faire de compteur)

  17. #17
    Membre régulier
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Points : 110
    Points
    110
    Par défaut
    J'ai essayé ça pour supprimer les EmailTest :

    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
     $i = 1;
      foreach($msgsorted as $message) {
    	  $header = imap_header($mbox, $message);
    	  $formatdate = date ("Y-m-d", $header->udate);
    	  $formattime = date ("H:i:s", $header->udate);
     // echo $new_time;
      if($formatdate==$date_current){
    	//  	echo "{$header->subject} - $formatdate - $formattime<br />\n";
     
    	  if((($header->subject)=="testEmail")&&($formattime>$new_time)){
    	  	$testOK=true;
             echo "Numero mail : ";
             echo $i;
           
              	echo "{$header->subject} - $formatdate - $formattime<br />\n";
                imap_delete($mbox, $i);
                  
               echo "message test effacé ";
    	 	}
         
     	}
        $i = $i+1;
      }
    
        imap_expunge($mbox);
        imap_close($mbox);
    J'arrive à afficher les mails, mais le message n'est pas supprimé.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/07/2014, 15h39
  2. Recherche dynamique par date
    Par antonag dans le forum Développement
    Réponses: 2
    Dernier message: 23/07/2012, 10h47
  3. [MySQL] Recherche avancée par date
    Par Evengeline dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/07/2011, 13h53
  4. recherche personnalisée par date ?
    Par mohe27 dans le forum SQL
    Réponses: 7
    Dernier message: 06/03/2011, 14h05
  5. Recherche de fichiers par dates en php
    Par essse dans le forum Langage
    Réponses: 3
    Dernier message: 24/02/2009, 11h59

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