imap + notls = impossible de déplacer des messages

Répondre
allserv
le 05/11/2007 à 16:02
allserv
Bonjour,

Je suis en train de coder un script qui devrait permettre de déplacer les messages dont l'entête du message contient X-Spam-status : Yes.

En local tout fonctionne parfaitement cependant en ligne j'ai une belle erreur :

Warning: imap_open() [function.imap-open]: Couldn't open stream {mail.xxx.net:143}INBOX in /home/etower/www/imap.class.php on line 26
connexion impossible : TLS/SSL failure for mail.e-tower.net: SSL negotiation failed

Dans la classe que j'utilise il y a bien une option qui permet de rajouter le /notls lors de la connexion au serveut et là du coup je n'ai plus l'erreur mais aucun message n'est déplacé :-\

Je vous donne la connexion et la procédure pour déplacer les messages :

<?php
function open($username, $password, $host, $port, $notls = 0) {
if($notls>0)$notls_str="/notls";
$i = imap_open("{" . $host . ":" . $port . $notls_str . "}INBOX", $username, $password) or die("connexion impossible : " . imap_last_error());
if(!$i) return false;
$this->imapstr = $i;
$this->user = $username;
$this->pass = $password;
$this->host = $host;
$this->port = $port;
return true;
}
//-----------------------------------------------------------------
function moveSpamNewMessages(){
$status = imap_status($this->imapstr, "{".$this->host."}INBOX", SA_ALL);
if($status) {
$nb=0;
for($i=1;$i<=$status->messages;$i++){

$infos = imap_headerinfo($this->imapstr,$i);
if($infos->Unseen == 'U' || $infos->Recent == 'N'){

if(strpos(imap_fetchheader($this->imapstr,$i),"X-Spam-Status: Yes")) {
$this->mvmail($i, "{".$this->host."}INBOX.Junk");
$nb++;
}

}

}
}

return $nb;
}
?>


J'ai au beau regarder la doc php je ne vois pas quel pourrait être le problème, si quelqu'un peut m'aider :)

Merci d'avance
LupusMic
le 05/11/2007 à 19:53
LupusMic
Salut,

Une des règles de base en programmation, c'est de mettre une opération par ligne, pour faciliter la visibilité. La deuxième règle, c'est déviter de construire les chaines à la volée (bon, j'avoue, ça c'est l'expérience qui me l'a appris).

$i = imap_open("{" . $host . ":" . $port . $notls_str . "}INBOX", $username, $password) or die("connexion impossible : " . imap_last_error());


Va devenir :
$imap_url = sprintf("{%s:%d/%s}INBOX", $host, $port, $notls ? 'notls' : 'tls') ;

$imap_con = imap_open($imap_url, $username, $password) ;

if(!$imap_con)
die("connexion impossible : " . imap_last_error());


Troisième commandement, on lit la documentation en entier, pour ne pas louper des choses importantes :
Un nom de boîte aux lettres est constitué d'une adresse de serveur, et d'une adresse de boîte sur ce serveur. Le mot réservé INBOX représente la boîte aux lettres de l'utilisateur courant. Les noms de boîtes aux lettres qui contiennent des caractères spéciaux (en dehors de l'espace ASCII) doivent être encodés avec imap_utf7_encode().


En PHP on a un truc très pratique : les booléens. Donc n'utilises pas 0 pour indiquer $notls. Préfère un paramètre $with_tls, qui prendra la valeur « true » ou « false ». Et essaye de faire en sorte qu'un booléen ne soit pas en logique inversée (c'est à dire que ça valeur ne doit pas être false pour vouloir dire true).
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
allserv
le 13/11/2007 à 11:23
allserv
Merci LupusMic de m'avoir répondu, j'ai résolu le problème ca venait tout simplement que dans ma classe de déplacement dans la fonction imap_mail_move il utilisait la constante CP_UID et donc la commande imap ne fonctionnait pas.

Merci encore

Louis
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours