IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

classe pouvant lire un email


Sujet :

API standards et tierces Java

  1. #1
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut classe pouvant lire un email
    salut à tous et toutes.
    je dois réaliser une classe java qui pourrait lire des emails d'une adresse donnée et ensuite stocker le éventuelles pièce jointes dans un dossier distant.
    j'ai vu l'api javamail et le jaf mais je n'y pige presque rien.
    merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Je connais pas JAF mais Javamail est grosso modo une représentation objet des protocoles SMTP, POP3 et IMAP et du système MIME. Si tu ne connais pas ces protocoles/normes, il est évident que tu ne comprendras rien du tout à l'API.

    Tu devrais te plonger soit dans des tutoriels plus spécifiques. Comme par exemple celui-ci. Soit carrément dans les RFC concernées, comme par exemple celle-là.
    Tu trouveras pas mal de RFC traduites ici.

    Il en va de même pour n'importe quelle API/fonctionnalité, si tu ne connais pas la logique "métier" qui est derrière, il ne sert à rien de se plonger dans la documentation ou le code en espérant chopper un exemple qui remplisse ton besoin.

    Pour le dossier distant tu auras certainement besoin de FTP.

  3. #3
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    dans la boite on a un serveur de messagerie MsExchange 2003.
    voici un bout de code que j'ai essayé et qui ,à mon avis, marche sauf que ça plante lors de l'authentification au pres du serveur

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    import javax.mail.*;
    import java.util.*;
    import java.io.*;
    publicclass ClientMail {
    publicstaticvoid main(String args[])
    {
    static String host = "**.**.**.**
    /* Récupération des propriété du System */
    Properties prop = System.getProperties();
    System.out.println("Creation d'une session mail");
    /* Creation d'un objet Session */
    Session sess = Session.getDefaultInstance(prop, null);
    sess.setDebug(true);
    prop.list(System.out);
    try {
    String user = "*******";
    String pwd = "****************"; 
    System.out.println("obtention d'un objet store");
    Store st = sess.getStore("pop3");
     
    st.connect(host, user, pwd);
    System.out.println("connection ok");
    System.out.println("st=:" + st);
    System.out.println("Obtention d'un folder");
    Folder f = st.getFolder("INBOX");
    f.open(Folder.READ_ONLY);
    System.out.println("Obtention des messages");
    Message msg[] = f.getMessages();
    System.out.println("nombre de messages : " + f.getMessageCount());
    System.out.println("nombre de nouveau messages : "
    + f.getNewMessageCount());
    System.out.println("liste des nouveau messages");
    for (int i = 0; i < msg.length; i++) {
    if (msg.isMimeType("text/plain")) {
    System.out.println("Expediteur: " + msg.getFrom()[0]);
    System.out.println("Sujet: " + msg.getSubject());
    [i]System.out
    .println("Texte: " + (String) msg.getContent());
    }
    System.out.println("fin des messages");
    }
    }
    catch (NoSuchProviderException e) {
    System.out.println("Erreur sur le provider" + e.getMessage());
    } catch (MessagingException e) {
    System.out.println("Erreur sur Message" + e.getMessage());
    } catch (IOException e) {
    System.out.println("Erreur sur IO" + e.getMessage());
    } catch (Exception e) {
    [i][i][i]System.out.println("Erreur indetermiee" + e.getMessage());
    }
    }
    }
    pour nous authentifier dans le serveur avec l'interface web on doit mettre le nom de domain\username et puis le mot de passe
    mais àa ne cesse de me sortir l'erreur
    ERR Logon failure: unknown user name or bad password.

  4. #4
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419

  5. #5
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    j'ai lu dans quelque forums que le MsExchange utilise l'authentification avec windows et que je dois passer par une socket paramétrée
    le je bloque carrément.

  6. #6
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    mercie marco pour toutes tes reponses maintenant j'arrive à le connecter le truc etait dans le nom d'utilisateur qui devrait avoir la forme
    domaine\utilisateur\utilisateurexchange

  7. #7
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    j'arrive à lire les message mais je ne sais pas comment pourrais je m'attaquer aux eventuelles pieces jointes.

  8. #8
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    C'est maintenant qu'il te faut te renseigner sur MIME et Base64.

    Après tu pourrais très bien trouver un code source sur ce site ou un autre qui te fera le boulot mais si tu ne comprends rien tu auras vite des problèmes si tu tombes sur des cas particuliers.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu va recevoir des objets de type Message du server, typecaste les en "MimeMesage" ou en "Pop3Message" et utilise la méthode getContent(). Si c'est un email avec attachement, l'objet retourné sera du type MimeMultipart, contenant plusieurs parties.

  10. #10
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Raaaaah mais tu lui mâches tout le boulot !

  11. #11
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    alors là je suis totalement planté j'ai essayé avec un tutoriel jGURU
    http://java.sun.com/developer/onlineTraining/JavaMail/
    mais je n'arrive toujours pas à enregistrer les pièces jointes.

    voilà le bout de code que j'utilise pour récupérer les pièces jointes si quelqu'un pourrait m'aide à diagnostiquer l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    message = folder.getMessages();
    for (int i=0, n=message.length; i<n; i++) {
    try {
    System.out.println(i + ": " + message[i].getFrom()[0]+ "\t" + message[i].getSubject()+"\t"+message.getDisposition());
     
     
    [i]Multipart mp = (Multipart)message.getContent();
    for (int j=0;j<mp.getCount();j++) { 
    Part part = mp.getBodyPart(j);
    [i]saveFile(part.getFileName());
    MimeBodyPart mbp = (MimeBodyPart)part;
     
    
    }
    } catch (MessagingException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }

  12. #12
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    D'abord il manque l'indicateur d'index du tableau ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Multipart mp = (Multipart)message.getContent();
    Ya bien un [i] mais il n'est pas au bon endroit, je me demande comment Eclipse peut laisser passer un truc pareil.

    Ensuite je comprends pas ce passage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    saveFile(part.getFileName());
    MimeBodyPart mbp = (MimeBodyPart)part;
    D'un point de vue logique il n'est pas normal de caster ton part en MimeBodyPart APRES l'avoir sauvegardé sur le disque donc autant faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MimeBodyPart mbp = (MimeBodyPart)mp.getBodyPart(j);
    saveFile(mbp.getFileName());
    saveFile() est une procédure statique de la classe courante non ? Il nous faut le code source de cette méthode pour te dire où ça pêche ainsi que de ses dépendances si elle en a. Dans le cas où tu aurais un problème sur l'enregistrement de la pièce jointe bien sûr mais déjà le premier point pose problème c'est certain.

    Notes aussi que tu ne passes pas ton MimeBodyPart en paramètre de ta méthode saveFile() donc je me demande comment tu vas sauvegarder les données

    Dernière remarque, il ne faut pas déclarer de références à l'intérieur d'une boucle comme tu l'as fait ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Multipart mp = (Multipart)message.getContent();
    et ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Part part = mp.getBodyPart(j);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MimeBodyPart mbp = (MimeBodyPart)part;
    parce qu'à chaque itération un nouvel emplacement mémoire est utilisé alors qu'en les déclarant en dehors de la boucle ce n'est pas le cas.

    Je crois que c'est tout.

  13. #13
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    Merci Marco pour tes réponses précieuse.
    j'arrive à lire les pièces jointes des email mais la fonction savefile du tutoriel jguru ne marche pas je suis entrain de chercher dans le net un peu d'aide
    voila la boucle qui lit les message et qui m'affiche les nom des pièces jointes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for(int i=0;i<messages.length;i++){
    System.out.println("-------------------------Message : "+i);
    System.out.println(" ---From : "+messages.getFrom()[0]);
    mp = (Multipart)messages.getContent();
    for (int j=0, n=mp.getCount(); j<n; j++) {
    part = mp.getBodyPart(j);
    disposition = part.getDisposition();
    if ((disposition != null) && ((disposition.equals(Part.ATTACHMENT) ||(disposition.equals(Part.INLINE))))) {
    System.out.println(part.getFileName());
    }
    }
    System.out.println("--------------------------------------");
    }
    et merci d'avance.

  14. #14
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    C'est le code source de saveFile() qu'il me faut. Là tu me remets ce que tu avais mis au message précédent.

  15. #15
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    j'ai utilisé la fonction de copie du FAQ java et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    publicstaticvoid copyFile(String FileName, InputStream is){
    try{
    InputStream sourceFile = is;
     
    try{
    FileOutputStream destinationFile = null;
     
    try{
    destinationFile = new FileOutputStream("./PJs/"+FileName);
    byte buffer[] = newbyte[512 * 1024];
    int nbLecture;
     
    while ((nbLecture = sourceFile.read(buffer)) != -1){
    destinationFile.write(buffer, 0, nbLecture);
    }
    } finally {
    destinationFile.close();
    }
    } finally {
    sourceFile.close();
    }
    } catch (IOException e){
    e.printStackTrace();
    } 
    }
    maintenant ce qu'il me reste c'est de faire en sorte de ne pas refaire le travail pour le pièce jointe déjà copier j'ai un idée qui consiste à utiliser les flags user mais je ne sais pas si je peux y mettre une clé propre à moi pour reconnaitre la messages déjà traité par la classe et si MS exchange permet ce genre de manip
    si j'ai du nouveau je vous tiendrai eu courant

  16. #16
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    j'ai vu dans le net que les flags pour pop3 ne sont pas permanants et qu'ils ne durent que pour la session en cours avec le serveur.

  17. #17
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Oui c'est vrai.

    Ceci dit la philosophie de POP c'est que quand tu télécharges un mail depuis le serveur tu le supprimes à la fin de la connexion. Si on veut pouvoir laisser les mails pour les relire plus tard il faut utiliser IMAP.

    D'où le terme de boite aux lettres à la base. Il ne viendrait à l'idée de personne de sortir une lettre de sa boite physique, de l'ouvrir et de la lire puis de la remettre dedans pour plus tard.

  18. #18
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    je souhaite qu'on ne prend pas ça comme un abus de ups mais je soulève ma question si un sauveur et dans les parage parce que là je suis totalement à coté de la plaque.

  19. #19
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Mais c'est quoi ta question ?

  20. #20
    Membre éclairé Avatar de thaundeadboss
    Homme Profil pro
    Développeur COBOL & JAVA
    Inscrit en
    Février 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur COBOL & JAVA
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 211
    Par défaut
    s'il ya un moyen pour utiliser les flags des message pour ne pas avoir à refaire le traitement pour les messages dont les pièces jointes ont déjà été copiées.

    cette classe à pour but d'automatiser la copie des pj d'une boite mail sensée recevoir des documents relatifs aux demandes des clients c'est à dire un jour la boite pourrait être volumineuse avec beaucoup de pièces jointes alors le système va planter à l'exécution du programme.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Utiliser AdvancedSearch sous VBA Excel pour lire les emails d'Outlook
    Par jean.cdc dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/02/2011, 15h29
  2. Impossibilité de lire mes emails
    Par fc1emv dans le forum Outlook Express / Windows Mail
    Réponses: 1
    Dernier message: 18/09/2009, 16h19
  3. Lire un email en c++
    Par snakemetalgear dans le forum Débuter
    Réponses: 6
    Dernier message: 24/10/2008, 22h24
  4. Classe lettre : hyperlien vers email erroné
    Par Alamassepointcom dans le forum Mise en forme
    Réponses: 1
    Dernier message: 21/03/2007, 17h10
  5. débutant cherche classe pour lire un wav simplement
    Par dimitrimm972 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 27/05/2006, 17h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo