IMAP + HOTMAIL

Résolu
Bonjour,

Apres de nombreuses recherches je ne trouve pas la solution à mon problème.
Je m'explique : avec le script ci-dessous j'arrive à me connecter à toutes mes boites mails (gmail etc.) et à lire le nombre de mails non lu, sauf hotmail ! La lect

<?php
getUnreadHotmail();

function getUnreadHotmail()
{
 $mbox = imap_open("{imap-mail.outlook.com:993/imap/ssl/novalidate-cert}INBOX", "ADRESSE_MAIL", "MOT_DE_PASSE", OP_HALFOPEN)
 or die("Connexion impossible : " . imap_last_error());
 
 $status = imap_status($mbox, "{imap-mail.outlook.com:993/imap/ssl/novalidate-cert}INBOX", SA_ALL);
 if ($status) {
   echo "Non lu :     " . $status->unseen      . "<br />\n";
 } else {
   echo "imap_status a échoué : " . imap_last_error() . "\n";
 }

 imap_close($mbox);
}
?>


Ce qu'affiche ma page apres execution :

Non lu :


C'est à dire.. rien. Pourquoi avec hotmail je n'y arrive pas ? Une piste serait que cela vient de la version d'apache mais j'y crois peu. Je pense que je procede mal au niveau de l'imap_open...

Merci pour toute réponse...

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. Bonjour,

    Malheureusement imap_check() ne retourne pas le nombre de messages non lus (tag : SA_UNSEEN) cependant tu m'as permis de trouver la solution et je t'en remercie.

    Le seule solution est en effet imap_status() cependant au lieu d'utiliser ce code :

    $status = imap_status($mbox, "{imap-mail.outlook.com:993/imap/ssl/novalidate-cert}INBOX", SA_ALL);
    


    j'utilise ce code, la solution miracle :
    $status = imap_status($mbox, "{imap-mail.outlook.com:993/imap/ssl/novalidate-cert}INBOX", SA_UNSEEN);
    


    Voila merci !!!
    1. Modérateur
      Bonjour,
      Hotmail ( live, Outlook..) sont visiblement en Exchange.
      d'après un commentaire sur le manuel php... avec exchange.. imap_status ne fonctionne pas correctement...
      Il propose une solution à tester : https://www.php.net/manual/fr/function.imap-status.php#109381

      Remplacer ton appel à la fonction imap_status par celle ci-dessous
      <?php
          function my_imap_status($stream, $mailbox='', $info=SA_ALL)
          {
              // get current mailbox name (and info)
              $curr_obj=imap_check($stream);
              if(!$curr_obj) return false;
             
              // if request if for current mailbox then just return it
              if( (empty($mailbox)) || ($mailbox==$curr_obj->Mailbox) ) return $curr_obj;
             
              // get current mailbox
              $current_mailbox=$curr_obj->Mailbox;
             
              //switch to new mailbox
              if(!imap_reopen($stream, $mailbox)) return false;
             
              // get info
              $obj=imap_check($stream);
             
              // switch back to original mailbox
              imap_reopen($stream, $current_mailbox);
             
              //return info
              return $obj;
          }