IMAP + HOTMAIL

Résolu/Fermé
CyrionFR Messages postés 19 Date d'inscription mercredi 9 mars 2016 Statut Membre Dernière intervention 6 avril 2018 - Modifié le 29 août 2017 à 00:48
CyrionFR Messages postés 19 Date d'inscription mercredi 9 mars 2016 Statut Membre Dernière intervention 6 avril 2018 - 30 août 2017 à 04:04
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

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
29 août 2017 à 01:26
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;
    }

0
CyrionFR Messages postés 19 Date d'inscription mercredi 9 mars 2016 Statut Membre Dernière intervention 6 avril 2018
30 août 2017 à 04:04
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 !!!
0