Le protocole IMAP: Classe Java
Une classe java toute prête à l'emploi pour vos projet IMAP (contribution de laetitia)
NB: cette classe utilise les packages javax.mail et javax.activation que vous devez télécharger sur le site de sun (java)
import javax.mail.*;
import java.util.*;
import javax.mail.Flags.Flag;
import java.io.IOException;
import javax.mail.internet.InternetAddress;
public class ConnectionManager {
private String myLogin;
private String myPassword;
private String myProtocole;
private String myHost;
private int myPort;
private Session mySession;
private Store myStore;
private Folder myFolder;
private Message[] myMailBox;
public ConnectionManager() {
}
/* ----------------- initialisation de la connection ---------------*/
public boolean init(String login, String password, String protocole,
String host, int port)
{
myLogin = login;
myPassword = password;
myProtocole = protocole;
myHost= host;
myPort = port;
Properties props = System.getProperties();
// création d'une session
mySession = Session.getDefaultInstance(props,null);
mySession.setDebug(false);
//création d'un objet d'enregistrement de message
myStore = null;
try
{
myStore = mySession.getStore(myProtocole);
// DEBUG
System.out.println("store ok !");
}
catch (NoSuchProviderException e)
{
// DEBUG
System.out.println("store pas ok !");
return false;
}
// Connection
try
{
System.out.println("début conncetion");
myStore.connect(myHost, myPort, myLogin, myPassword);
System.out.println("connexion ok !");
}
catch ( MessagingException e)
{
System.out.println("connexion pas ok !");
return false;
}
return true;
}
/* -----------------------fermeture de la session ---------*/
/*-----------------------close ----------------------------*/
public boolean close()
{
try
{
// fermeture du store
myFolder.expunge();
myStore.close();
}
catch (MessagingException e)
{
return false;
}
return true;
}
/*--------------------- ouverture d'un répertoire---------------*/
/* ---------------------- openMailBox --------------------------*/
public boolean openMailBox(String mailbox)
{
// ouverture du répertoire courant INBOX
myFolder = null;
try
{
myFolder = myStore.getDefaultFolder();
if(myFolder == null)
{
System.out.println("Pas de boite aux lettres par défaut");
return false;
}
// par défaut on récupère les messages dans INBOX
myFolder = myFolder.getFolder(mailbox);
if (myFolder == null)
{
System.out.println("pas de inbox");
}
try
{
myFolder.open(Folder.READ_WRITE);
System.out.println("ficher " + myFolder.getName() + " ouvert");
}
catch (MessagingException e)
{
System.err.println("[process_folder]: cannot open folder " + myFolder +
": " + e.getMessage());
e.printStackTrace();
}
}
catch (MessagingException e)
{
return false;
}
try
{
myMailBox = new Message[myFolder.getMessageCount()];
myMailBox = myFolder.getMessages();
}
catch( MessagingException e ){}
return true;
}
//retourne le nombre de message contenu dans la boite
public int nbMessage()
{
int totalMessages;
try
{
totalMessages = myFolder.getMessageCount();
}
catch( MessagingException e )
{
return -1;
}
return totalMessages;
}
/* ----------------- retourne le nombre de message non lu -----------------*/
public int nbMessageUnread()
{
int nbMessage;
try
{
nbMessage = myFolder.getUnreadMessageCount();
}
catch (MessagingException e)
{
return -1;
}
return nbMessage;
}
/* ----------------- retourne le nombre de nouveau message -----------------*/
public int nbNewMessage()
{
int nbMessage;
try
{
nbMessage = myFolder.getNewMessageCount();
}
catch (MessagingException e)
{
return -1;
}
return nbMessage;
}
/*--------------------- retourne le nombre de message non lu ---------------*/
public int nbMessageRead()
{
return (nbMessage()-nbMessageUnread());
}
/*--------------------- retourne le nombre d'ancien message ---------------*/
public int nbOldMessage()
{
return (nbMessage()-nbNewMessage());
}
/*------------------------efface le message num ---------------------------*/
/* ---------------------DeleteMessage--------------------------------------*/
public boolean deleteMessage(int num)
{
try
{
myMailBox[num].setFlag(Flags.Flag.DELETED,true);
return true;
}
catch (MessagingException e)
{
return false;
}
}
/*------------------------retourner le sujet du message num ---------------------------*/
/* ---------------------getSubject--------------------------------------*/
public String getSubject(int num)
{
try
{
return myMailBox[num].getSubject();
}
catch(MessagingException e)
{
return null;
}
}
/*-------------- retourner l'adresse du message num --------------------*/
/* ---------------------GetAdresse--------------------------------------*/
public String getAdresse(int num)
{
Address[] myAdresse;
InternetAddress myAdr;
try
{
myAdresse = myMailBox[num].getFrom();
myAdr = new InternetAddress(myAdresse[0].toString());
return myAdr.getPersonal();
}
catch(MessagingException e)
{
return null;
}
}
/*------------------ retourner le sujet du message num -----------------*/
/* ---------------------getSubject--------------------------------------*/
public String getDate(int num)
{
GregorianCalendar myCalendar = new GregorianCalendar();
String myDate = new String();
String temp = new String();
try
{
myCalendar.setTime(myMailBox[num].getReceivedDate());
switch (myCalendar.get(myCalendar.DAY_OF_WEEK))
{
case Calendar.SUNDAY: temp = "dimanche "; break;
case Calendar.MONDAY: temp = "lundi "; break;
case Calendar.TUESDAY: temp = "mardi "; break;
case Calendar.WEDNESDAY: temp = "mercredi "; break;
case Calendar.THURSDAY: temp = "jeudi "; break;
case Calendar.FRIDAY: temp = "vendredi "; break;
case Calendar.SATURDAY: temp = "samedi "; break;
}
myDate = temp;
Integer i = new Integer(myCalendar.get(myCalendar.DATE));
myDate += i.toString();
switch (myCalendar.get(myCalendar.MONTH))
{
case 0: temp = " janvier"; break;
case 1: temp = " février"; break;
case 2: temp = " mars"; break;
case 3: temp = " avril"; break;
case 4: temp = " mai"; break;
case 5: temp = " juin"; break;
case 6: temp = " juillet"; break;
case 7: temp = " août"; break;
case 8: temp = " septembre"; break;
case 9: temp = " octobre"; break;
case 10: temp = " novembre"; break;
case 11: temp = " décembre"; break;
}
myDate += temp;
return myDate;
}
catch(MessagingException e)
{
return null;
}
}
/*------------------ retourner le text du message num -----------------*/
/* ---------------------getText--------------------------------------*/
public String getText(int num)
{
Multipart myMulti;
BodyPart myBody;
try
{
if(myMailBox[num].isMimeType("text/plain"))
{
myMailBox[num].setFlag(Flags.Flag.SEEN,true);
return (String)myMailBox[num].getContent();
}
else
{
myMulti = (Multipart)(myMailBox[num].getContent());
myBody = myMulti.getBodyPart(0);
myMailBox[num].setFlag(Flags.Flag.SEEN,true);
return (String)myBody.getContent();
}
}
catch(MessagingException e)
{
return null;
}
catch(IOException io)
{
return null;
}
}
/*--------retourne si le messages est nouveau ou non-------*/
/* ---------------------isNew--------------------------------------*/
public boolean isNew(int num)
{
try
{
return myMailBox[num].isSet(Flag.RECENT);
}
catch(MessagingException e)
{
return false;
}
}
/*--------retourne si le messages est lu ou non-------*/
/* ---------------------isRead--------------------------------------*/
public boolean isRead(int num)
{
try
{
return myMailBox[num].isSet(Flag.SEEN);
}
catch(MessagingException e)
{
return false;
}
}
}
|