Classe de connexion POP3
Vous constaterez très vite que nous utilisons les fonctions imap. Cela est dû au fait que IMAP et POP sont les mêmes protocoles à la différence que IMAP traite les mails sur le serveur mail, POP traite les mails en local.
class pop3 {
var $server; // Adresse du serveur, obligatoire
var $user; // Nom d'utilisateur
var $pass; // Mot de passe
var $folder = 'INBOX'; // Répertoire sur le serveur (INBOX par défaut)
var $port = 110; // Port du serveur (défaut: 110)
function pop3() {
// Constructeur
@list($this->server,
$this->user,
$this->pass,
$this->ufolder,
$this->uport) = func_get_args();
if ($this->ufolder == "") $this->ufolder = $this->folder;
if ($this->uport == "") $this->uport = $this->port;
}
function connect() {
// Ouverture de la connexion
$str_conn = "{".$this->server.":".$this->port."/pop3}".$this->folder;
$this->conn = imap_open($str_conn, $this->user, $this->pass) or die("Can't connect to $str_conn");
}
function close() {
// Fermeture de la connexion
imap_expunge($this->conn);
imap_close($this->conn);
$this->conn = false;
}
function del($int_mail) {
// Méthode pour supprimer un mail
imap_delete($this->conn, $int_mail);
}
function parse_header($headers) {
// Méthode pour mettre en forme les entêtes
$from = $headers->from;
foreach($from as $id => $object) {
@$this->from['name'] = $object->personal;
$this->from['email'] = strtolower($object->mailbox."@".$object->host);
}
$this->subject = $headers->subject;
$this->sent = $headers->udate;
}
function body($int_mail) {
// Méthode pour récupérer le corps d'un mail
$this->body = imap_body($this->conn, $int_mail);
}
}
Seules deux fonctions sont à expliquer:
- close() ne fait pas que fermer la connexion, elle fait d'abord un imap_expunge() qui permet en fait de forcer la suppression des emails marqués pour la destruction par del().
- parse_header() renvoit: un tableau contenant l'expéditeur (son nom et son email), le sujet sous forme de chaîne et la date d'envoi du mail (timestamp unix).
L'utilisation de cette classe est très simple:
var $server; // Adresse du serveur, obligatoire
var $user; // Nom d'utilisateur
var $pass; // Mot de passe
var $folder = 'INBOX'; // Répertoire sur le serveur (INBOX par défaut)
var $port = 110; // Port du serveur (défaut: 110)
function pop3() {
// Constructeur
@list($this->server,
$this->user,
$this->pass,
$this->ufolder,
$this->uport) = func_get_args();
if ($this->ufolder == "") $this->ufolder = $this->folder;
if ($this->uport == "") $this->uport = $this->port;
}
function connect() {
// Ouverture de la connexion
$str_conn = "{".$this->server.":".$this->port."/pop3}".$this->folder;
$this->conn = imap_open($str_conn, $this->user, $this->pass) or die("Can't connect to $str_conn");
}
function close() {
// Fermeture de la connexion
imap_expunge($this->conn);
imap_close($this->conn);
$this->conn = false;
}
function del($int_mail) {
// Méthode pour supprimer un mail
imap_delete($this->conn, $int_mail);
}
function parse_header($headers) {
// Méthode pour mettre en forme les entêtes
$from = $headers->from;
foreach($from as $id => $object) {
@$this->from['name'] = $object->personal;
$this->from['email'] = strtolower($object->mailbox."@".$object->host);
}
$this->subject = $headers->subject;
$this->sent = $headers->udate;
}
function body($int_mail) {
// Méthode pour récupérer le corps d'un mail
$this->body = imap_body($this->conn, $int_mail);
}
}
$test = new pop3("mail.domain.com", "myself@domain.com", "password");
$test->connect();
echo "Il y a ".imap_num_msg($test->conn)." mails dans la boite\n";
for ($i=1; $i<=imap_num_msg($test->conn); $i++) {
$test->parse_header(imap_headerinfo($test->conn, $i));
echo "Mail from <b>".$test->from['name']."</b> <".$test->from['email']."> envoyé le ".date("d/m/Y H:i", $test->sent)."Sujet: ".$test->subject."\n";
echo $test->body($i)."<hr>";
}
$test->close();
$test->connect();
echo "Il y a ".imap_num_msg($test->conn)." mails dans la boite\n";
for ($i=1; $i<=imap_num_msg($test->conn); $i++) {
$test->parse_header(imap_headerinfo($test->conn, $i));
echo "Mail from <b>".$test->from['name']."</b> <".$test->from['email']."> envoyé le ".date("d/m/Y H:i", $test->sent)."Sujet: ".$test->subject."\n";
echo $test->body($i)."<hr>";
}
$test->close();