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

Java Discussion :

Recevoir pièce jointe


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut Recevoir pièce jointe
    Salutation
    Énoncé :
    je voudrais savoir comment télécharger une pièce jointe automatiquement, c'est à dire, dès que la pièce est reçue dans ma boite, mon application la télécharge automatiquement sur mon disque
    j'ai réussi à envoyer une pièce jointe, mais pour la réception j'ai trouvé sur les forums des code qui me sont très compliqué
    donc je voudrais télécharger la pièce jointe (nomDeLaPiece.txt) depuis ma boite (xxxx@gmail.com) qui a été envoyer par (yyyy@gmail.com)
    Espérance :
    Merci de bien vouloir m'aider
    j'apprécierais la simplicité de vos réponses , car je suis débutant
    Je vous remercie d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Tu nous montres le code que tu as essayé et l'endroit où ça bloque ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Tu nous montres le code que tu as essayé et l'endroit où ça bloque ?
    j'ai réussi a Envoyer une pièce jointe, mais j'ai rien compris pour le téléchargement automatique d'une pièce jointe, c'est à dire que j'ai rien trouvé sur les forum qui répond à mes besoins, enfin c'est compliqué pour moi en plus!!! soyez indulgent SVP je débutes
    Svp veillez m'aider
    merci d'avance!!

  4. #4
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Fondamentalement, ce n'est pas différent que d'envoyer une pièce jointe.
    J'ai un programme de récup de mails avec pj mais si tu as déjà regardé ailleurs sans comprendre, cela ne servira à rien.
    Quels sont les tutos que tu as vu et qu'est-ce que tu n'as pas compris ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Est-ce que tu réussis à réceptionner un message simple (sans pièce attachée) ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Fondamentalement, ce n'est pas différent que d'envoyer une pièce jointe.
    J'ai un programme de récup de mails avec pj mais si tu as déjà regardé ailleurs sans comprendre, cela ne servira à rien.
    Quels sont les tutos que tu as vu et qu'est-ce que tu n'as pas compris ?
    http://www.developpez.net/forums/d13...ails-javamail/

    voici un tutoriel que je n'ai pas vraiment compris!! (comme je l'ai dit, l'envois marche très bien ), donc le téléchargement automatique de la pièce jointe qui pose problème
    Les points ambigus :
    il faut que je renseignes mon adresse mail qui va conteneir la pièce (xxxx@gmail.com) ainsi que le mot de passe, ensuite je dois identifier la pièce jointe, comment? c'est en renseignant le nom de la pièce jointe (nomPièce.zip)
    et aussi probablement renseigner l'adresse mail de la personne qui a envoyé la pièce jointe (yyyy@gmail.com)!!!
    et bien Mr je ne sais pas ou renseigner tout cela
    il ya autre chose aussi je ne sais que ce qu'ils veulent dire par "INBOX" et aussi Folder (répertoire!!!!! quel répertoire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Folder inbox = null;
    ....
    inbox = defaultFolder.getFolder("INBOX");
    SVP Mr simplifiez et expliqué moi comment faire, je suis débutant
    je vous remercie Mr

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    pour recevoir des mails, pas besoin d'adresse mail (ni de toi, ni de celui qui l'envoi (que tu ne peux pas connaitre avant d'avoir reçu de message forcément)

    Le turoriel explique comment se connecter (paragraphe II-B) à un serveur pop3 (ou imap) avec ton compte de messagerie (ce que tu renseignes dans la section correspondante dans ton client de messagerie habituel).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static void receiveMessage() { 
        // 1 -> La session 
        Properties properties = new Properties(); 
        properties.setProperty("mail.store.protocol", "pop3"); 
        properties.setProperty("mail.pop3.host", POP_SERVER3); 
        properties.setProperty("mail.pop3.user", POP_ACCOUNT3); 
        Session session = Session.getInstance(properties); 
        ... 
    }
    en rouge l'url de ton serveur pop3, et en vert le nom de ton compte (ici on fait référence à des constantes (private final static String POP_ACCOUNT="nomuser";)

    Et pour se connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    store = session.getStore(new URLName("pop3://" + POP_SERVER3)); 
    store.connect(POP_ACCOUNT3, POP_PASSWORD3);
    en bleu ton mot de passe

    Ensuite, l'accès à tes messages se fait par des dossiers
    Exactement comme dans ton client de messagerie préféré, ou tu as par exemple un dossier "Boite de réception", dont l'identifiant générique est INBOX... Ces dossiers sont dans un dossier racine, le defaultFolder.

    Donc le principe (voir le détail dans le tutoriel, paragraphe II-B) :
    - Creer une session pour se connecter à un compte de messagerie sur un serveur pop3 (ou imap, selon ton compte, la plupart des services de messagerie proposant les 2 accès)
    - Récupérer le dossier (folder) INBOX
    - Parcourir la liste des messages se trouvant dans le dossier récupéré

    Pour chaque message, tu as un titre, l'adresse de l'envoyeur, un corps (body) et éventuellement des pièces jointes : pareil, l'exemple pour lire un message et récupérer ses pièces jointes dans le tuto est très explicite (Paragraphe III-B)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    pour recevoir des mails, pas besoin d'adresse mail (ni de toi, ni de celui qui l'envoi (que tu ne peux pas connaitre avant d'avoir reçu de message forcément)

    Le turoriel explique comment se connecter (paragraphe II-B) à un serveur pop3 (ou imap) avec ton compte de messagerie (ce que tu renseignes dans la section correspondante dans ton client de messagerie habituel).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private static void receiveMessage() { 
        // 1 -> La session 
        Properties properties = new Properties(); 
        properties.setProperty("mail.store.protocol", "pop3"); 
        properties.setProperty("mail.pop3.host", POP_SERVER3); 
        properties.setProperty("mail.pop3.user", POP_ACCOUNT3); 
        Session session = Session.getInstance(properties); 
        ... 
    }
    en rouge l'url de ton serveur pop3, et en vert le nom de ton compte (ici on fait référence à des constantes (private final static String POP_ACCOUNT="nomuser";)

    Et pour se connecter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    store = session.getStore(new URLName("pop3://" + POP_SERVER3)); 
    store.connect(POP_ACCOUNT3, POP_PASSWORD3);
    en bleu ton mot de passe

    Ensuite, l'accès à tes messages se fait par des dossiers
    Exactement comme dans ton client de messagerie préféré, ou tu as par exemple un dossier "Boite de réception", dont l'identifiant générique est INBOX... Ces dossiers sont dans un dossier racine, le defaultFolder.

    Donc le principe (voir le détail dans le tutoriel, paragraphe II-B) :
    - Creer une session pour se connecter à un compte de messagerie sur un serveur pop3 (ou imap, selon ton compte, la plupart des services de messagerie proposant les 2 accès)
    - Récupérer le dossier (folder) INBOX
    - Parcourir la liste des messages se trouvant dans le dossier récupéré

    Pour chaque message, tu as un titre, l'adresse de l'envoyeur, un corps (body) et éventuellement des pièces jointes : pareil, l'exemple pour lire un message et récupérer ses pièces jointes dans le tuto est très explicite (Paragraphe III-B)
    Merci pour le détail
    je vais essayé ce que vous avez expliqué!!
    mais juste deux questions avant (url du serveur pop3 de google c'est www.gmail.com ?) avec ou sans http ?
    et la class inputStreamToStrings() je ne la trouve pas sur le tuto, et sur internet c'est compliqué aussi!!!! http://javarevisited.blogspot.com/20...-tutorial.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    inputStreamToStrings(...)
    Merci d'avance .

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gerxwcv Voir le message
    mais juste une question avant (url du serveur pop3 de google c'est www.gmail.com ?) avec ou sans http ?
    Merci d'avance .
    Bon, la c'est sûr le tutoriel est un peu limité sur des aspects plus spécifiques comme ceux de gmail qui est sécurisé en SSL

    Dans la section Paramètres de ton accès web à gmail, tu as une sous section pop, avec un lien pour en savoir plus. Tu y noteras qu'il faut activer cette option pour pouvoir l'utiliser...

    si tu suis les instructions, on va finir par te dire que les coordonnées de connexion à un compte pop gmail sont :

    • pop.gmail.com
    • Utiliser SSL : Oui
    • Port : 995


    Pour indiquer que tu veux utiliser SSL : il faut préciser dans la session le paramètre : mail.pop3.ssl.enable (pour info, tous les paramètres possibles)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.setProperty("mail.pop3.ssl.enable", "true");
    Pareil pour le port :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.put("mail.pop3.port", "995");
    En plus, pour faire fonctionner le SSL il faut indiquer d'autres paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.pop3.socketFactory.fallback", "false");
    properties.setProperty("mail.pop3.socketFactory.port", "995");
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Bon, la c'est sûr le tutoriel est un peu limité sur des aspects plus spécifiques comme ceux de gmail qui est sécurisé en SSL

    Dans la section Paramètres de ton accès web à gmail, tu as une sous section pop, avec un lien pour en savoir plus. Tu y noteras qu'il faut activer cette option pour pouvoir l'utiliser...

    si tu suis les instructions, on va finir par te dire que les coordonnées de connexion à un compte pop gmail sont :

    • pop.gmail.com
    • Utiliser SSL : Oui
    • Port : 995


    Pour indiquer que tu veux utiliser SSL : il faut préciser dans la session le paramètre : mail.pop3.ssl.enable (pour info, tous les paramètres possibles)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.setProperty("mail.pop3.ssl.enable", "true");
    Pareil pour le port :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    properties.put("mail.pop3.port", "995");
    En plus, pour faire fonctionner le SSL il faut indiquer d'autres paramètres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    properties.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    properties.setProperty("mail.pop3.socketFactory.fallback", "false");
    properties.setProperty("mail.pop3.socketFactory.port", "995");
    Merci Mr
    et pour la class InputStreamToString()
    je fais comment? lui, il l'a utilisé dans son tuto, sans la définir !!
    Merci

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ah oui, désolé, j'avais pas vu cette méthode sortie de nulle part et pas décrite

    C'est vrai que le tuto est un peu léger sur l'aspect général du fonctionnement et se cantonne à un aspect particulier

    Ca va être un peu plus compliqué que ce qu'il a mis.

    Tout d'abord, il va falloir distinguer si on un message simple, ou un message constitué de plusieurs éléments.

    Un moyen simple de le faire est de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
            Object content = message.getContent();
     
            if (content instanceof Multipart) {
                readMultipart((Multipart) content );
            } else {
                readPart(message);
     
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void readMultipart(Multipart multipart)
            throws MessagingException, IOException {
        int n = multipart.getCount();
        for (int i = 0; i < n; i++) {
            readPart(multipart.getBodyPart(i));
        }
    }
    Pour readPart(Part part), on va traiter chaque partie séparément, mais de la même façon

    Tout d'abord, il faut déterminer ce qu'il y a dans une partie : du texte, du html, un attachement (pièce jointe en français)...

    Pour faire ça il faut appeler les méthodes getDisposition() et getContentType() de la classe Message et tester la valeur retournée :

    - si getDisposition() retourne null on est dans le cas du message
    - si getDisposition() retourne Part.ATTACHMENT on est dans le cas d'un attachement
    - si getDisposition() retourne Part.INLINE on est dans le cas d'un élément dans un texte (comme une image au milieu du texte du mail)


    si part.getDisposition()==null :

    - si le content type est "text/plain", l'instance retournée par getContent() est une String et il s'agit d'un texte
    - s'il s'agit de "text/plain; charset="<un nom de charset>", il s'agit d'un texte mais encodé dans un encodage particulier : je ne me souviens plus si getContent() te retourne la String bien décodée, ou s'il ne faut pas récupérer le stream par getInputStream et lire avec un charset (par exemple avec un InputStreamReader en parsant le charset pour le passer en argument)
    - s'il s'agit de text/html, c'est pareil, sauf que la chaine récupérée contiendra du html

    si Part.ATTACHMENT.equals(part.getDisposition()) :
    Il suffit de récupérer le part.getInputStream() et le copier dans un FileOutputStream(new File(dossierDeSauvegarde,part.getFileName()))avec la technique habituelle de copie de inputstream vers outputstream (enfin ça dépend de la façon de gérer : si tu ne fais qu'afficher le mail dans une JFrame par exemple, tu peux lire les images attachées directement par ImageIO.load(...) pour les afficher directement (ou tu affiches plutôt des icônes (en fonction du contenttype par exemple) et un bouton télécharger les pièces jointes)

    si Part.INLINE.equals(part.getDisposition()) c'est comme pour Part.ATTACHMENT, mais il y aura une référence à ce fichier dans un des textes
    par exemple un <IMG> dans un html : il faudra éventuellement modifier le src dans ce cas pour qu'il pointe vers le path du fichier en fonction de l'endroit ou tu vas sauvegarde le fichier (ou sauvegarder le html exactement à l'endroit du fichier et utiliser un src relatif)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  12. #12
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Aujourd'hui 03h36
    Problème d'insomnie ?

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Problème d'insomnie ?
    Je suis atteint d'une variante de noctambulisme Je dors plus facilement le jour que la nuit, et il m'arrive même de sauter des nuits... bon avec l'age je peux plus le faire plusieurs fois par semaine
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Ah oui, désolé, j'avais pas vu cette méthode sortie de nulle part et pas décrite

    C'est vrai que le tuto est un peu léger sur l'aspect général du fonctionnement et se cantonne à un aspect particulier

    Ca va être un peu plus compliqué que ce qu'il a mis.

    Tout d'abord, il va falloir distinguer si on un message simple, ou un message constitué de plusieurs éléments.

    Un moyen simple de le faire est de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    try {
            Object content = message.getContent();
     
            if (content instanceof Multipart) {
                readMultipart((Multipart) content );
            } else {
                readPart(message);
     
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private void readMultipart(Multipart multipart)
            throws MessagingException, IOException {
        int n = multipart.getCount();
        for (int i = 0; i < n; i++) {
            readPart(multipart.getBodyPart(i));
        }
    }
    Pour readPart(Part part), on va traiter chaque partie séparément, mais de la même façon

    Tout d'abord, il faut déterminer ce qu'il y a dans une partie : du texte, du html, un attachement (pièce jointe en français)...

    Pour faire ça il faut appeler les méthodes getDisposition() et getContentType() de la classe Message et tester la valeur retournée :

    - si getDisposition() retourne null on est dans le cas du message
    - si getDisposition() retourne Part.ATTACHMENT on est dans le cas d'un attachement
    - si getDisposition() retourne Part.INLINE on est dans le cas d'un élément dans un texte (comme une image au milieu du texte du mail)


    si part.getDisposition()==null :

    - si le content type est "text/plain", l'instance retournée par getContent() est une String et il s'agit d'un texte
    - s'il s'agit de "text/plain; charset="<un nom de charset>", il s'agit d'un texte mais encodé dans un encodage particulier : je ne me souviens plus si getContent() te retourne la String bien décodée, ou s'il ne faut pas récupérer le stream par getInputStream et lire avec un charset (par exemple avec un InputStreamReader en parsant le charset pour le passer en argument)
    - s'il s'agit de text/html, c'est pareil, sauf que la chaine récupérée contiendra du html

    si Part.ATTACHMENT.equals(part.getDisposition()) :
    Il suffit de récupérer le part.getInputStream() et le copier dans un FileOutputStream(new File(dossierDeSauvegarde,part.getFileName()))avec la technique habituelle de copie de inputstream vers outputstream (enfin ça dépend de la façon de gérer : si tu ne fais qu'afficher le mail dans une JFrame par exemple, tu peux lire les images attachées directement par ImageIO.load(...) pour les afficher directement (ou tu affiches plutôt des icônes (en fonction du contenttype par exemple) et un bouton télécharger les pièces jointes)

    si Part.INLINE.equals(part.getDisposition()) c'est comme pour Part.ATTACHMENT, mais il y aura une référence à ce fichier dans un des textes
    par exemple un <IMG> dans un html : il faudra éventuellement modifier le src dans ce cas pour qu'il pointe vers le path du fichier en fonction de l'endroit ou tu vas sauvegarde le fichier (ou sauvegarder le html exactement à l'endroit du fichier et utiliser un src relatif)
    Merci pour tout Mr!!
    mais je trouve que c'est compliqué Mr!!
    et puis, mon problème est :
    -1-ouvrir ma boite mail
    -2-chercher le message qui contient la pièce jointe dont j'ai besoin (elle porte un nom) ie: sélectionner le message qui contient la pièce jointe (je ne sais pas comment faire, peut être parcourir la liste de tous les messages, et faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if message == nomPieceJointe.txt
    je ne sais pas)
    -3-chercher la pièce jointe : si trouvée ----> télécharger sur le disque
    si non trouvée -----> il faut que dès que la pièce jointe s'envoi par (yyy@gmail.com) mon programme la télécharge automatiquement, je ne sais pas si il y a une méthode qui fait ça!! ou bien il faut faire une boucle infini, jusqu'à ce que la pièce soit envoyé!
    aidez moi SVP, et excusez m'on insistance, vous m'êtes d'une très grande aide
    je vous suis redevable

  15. #15
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gerxwcv Voir le message
    Merci pour tout Mr!!
    mais je trouve que c'est compliqué Mr!!
    et puis, mon problème est :
    -1-ouvrir ma boite mail
    -2-chercher le message qui contient la pièce jointe dont j'ai besoin (elle porte un nom) ie: sélectionner le message qui contient la pièce jointe (je ne sais pas comment faire, peut être parcourir la liste de tous les messages, et faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if message == nomPieceJointe.txt
    je ne sais pas)
    -3-chercher la pièce jointe : si trouvée ----> télécharger sur le disque
    si non trouvée -----> il faut que dès que la pièce jointe s'envoi par (yyy@gmail.com) mon programme la télécharge automatiquement, je ne sais pas si il y a une méthode qui fait ça!! ou bien il faut faire une boucle infini, jusqu'à ce que la pièce soit envoyé!
    aidez moi SVP, et excusez m'on insistance, vous m'êtes d'une très grande aide
    je vous suis redevable
    Tu es entrain de dire que tu veux capter un message qui contient une pièce jointe avec un nom déterminé et que tu veux que ce fichier soit automatiquement sauvegardé dans un dossier de ton disque ? C'est ça ?

    Déjà, tu ne pourras pas empêcher quelqu'un de t'envoyer un message dans ta bal avec une pièce jointe qui a le nom que tu cherches... donc soit il faut que tu prévois quelque chose pour distinguer le message que tu cherches (par son objet par exemple), soit tu prévois un nom de fichier suffisamment spécial pour minimiser le risque, soit tu as une possibilité que tes fichiers chargés automatiquement soit écrasés par d'autres que tu ne veux pas.

    Ensuite, effectivement, tu peux simplement, faire du polling (genre te connecter toutes les 30 minutes sur ta bal) :
    - parcourir tous les messages du dossier inbox
    - pour chaque message tester s'il s'agit d'un message dont getContent() instanceof MultiPart est vrai (et si son expediteur est yyyy@gmail...)
    - si c'est le cas, parcourir tous les Parts du MultiPart, et tester le résultat de getFileName() pour cherche s'il correspond au nom de fichier que tu attends
    - quand c'est le cas, créer le fichier correspondant
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Tu es entrain de dire que tu veux capter un message qui contient une pièce jointe avec un nom déterminé et que tu veux que ce fichier soit automatiquement sauvegardé dans un dossier de ton disque ? C'est ça ?

    Déjà, tu ne pourras pas empêcher quelqu'un de t'envoyer un message dans ta bal avec une pièce jointe qui a le nom que tu cherches... donc soit il faut que tu prévois quelque chose pour distinguer le message que tu cherches (par son objet par exemple), soit tu prévois un nom de fichier suffisamment spécial pour minimiser le risque, soit tu as une possibilité que tes fichiers chargés automatiquement soit écrasés par d'autres que tu ne veux pas.

    Ensuite, effectivement, tu peux simplement, faire du polling (genre te connecter toutes les 30 minutes sur ta bal) :
    - parcourir tous les messages du dossier inbox
    - pour chaque message tester s'il s'agit d'un message dont getContent() instanceof MultiPart est vrai (et si son expediteur est yyyy@gmail...)
    - si c'est le cas, parcourir tous les Parts du MultiPart, et tester le résultat de getFileName() pour cherche s'il correspond au nom de fichier que tu attends
    - quand c'est le cas, créer le fichier correspondant
    J'ai prévu un nom très spéciale pour la pièce jointe, et puis son nom change que pas qu'elle s’écrase lors de l'enregistrement sur le disque!!!
    mais Mr!! je ne sais pas comment faire tout cela,
    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
    Algorithme telecharge automatiquement pièce jointe:
    
    1-se connecté a la boite Gmail :
    
    Properties props = new Properties();
                props.put("mail.smtp.auth", "true");
                props.put("mail.smtp.starttls.enable", "true");
                props.put("mail.smtp.host", "smtp.gmail.com");
                props.put("mail.smtp.port", "587");
    
            Session session = Session.getInstance(props,
                    new javax.mail.Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
            });
    
    2- récupérer la liste de INBOX (je ne sais pas comment faire)
    3- parcourir la liste (je ne sais pas non plus)
    4- télécharger la liste si trouvée.
    Merci Mr pour tout ce que vous faites
    et excusez mon insistance encore une fois
    je vous suis redevable Mr

  17. #17
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gerxwcv Voir le message
    2- récupérer la liste de INBOX (je ne sais pas comment faire)
    3- parcourir la liste (je ne sais pas non plus)
    4- télécharger la liste si trouvée.
    Euh mais tu as déjà codé en java, un minimum, non ? Et tout est indiqué dans les posts précédents ou le tuto... je vais pas écrire le programme pour toi...

    Le polling, à la limite j'en ai pas parlé (regardes du coté des Timer par exemple), mais tout le reste, y'a tous les bouts de codes qu'il faut :
    - récupérer la liste de INBOX : c'est récupérer le dossier INBOX dans le defaultFolder (code dans le tuto, paragraphe II-B),
    - et parcourir les messages qui s'y trouvent (code dans le tuto, printMessages(Folder folder) { dans paragraphe II-B)
    - tester la présence de la pièce jointe sur le message (voir mon post de cette nuit)
    - télécharger la pièce jointe, euh, faire par exemple (classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try ( InputStream input = part.getInputStream();
        OutputStream output = new FileOutputStream(new File(dossierDeSauvegarde, part.getFileName()) ) {
     
        byte[] buffer=new buffer[4096];
        int length;
        while( (length=input.read(input, buffer))!=0 ) {
            output.write(buffer,0,length);
        }
        output.flush();
    }
    catch(IOException ioe) {
    ioe.printStackTrace();
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Euh mais tu as déjà codé en java, un minimum, non ? Et tout est indiqué dans les posts précédents ou le tuto... je vais pas écrire le programme pour toi...

    Le polling, à la limite j'en ai pas parlé (regardes du coté des Timer par exemple), mais tout le reste, y'a tous les bouts de codes qu'il faut :
    - récupérer la liste de INBOX : c'est récupérer le dossier INBOX dans le defaultFolder (code dans le tuto, paragraphe II-B),
    - et parcourir les messages qui s'y trouvent (code dans le tuto, printMessages(Folder folder) { dans paragraphe II-B)
    - tester la présence de la pièce jointe sur le message (voir mon post de cette nuit)
    - télécharger la pièce jointe, euh, faire par exemple (classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    try ( InputStream input = part.getInputStream();
        OutputStream output = new FileOutputStream(new File(dossierDeSauvegarde, part.getFileName()) ) {
     
        byte[] buffer=new buffer[4096];
        int length;
        while( (length=input.read(input, buffer))!=0 ) {
            output.write(buffer,0,length);
        }
        output.flush();
    }
    catch(IOException ioe) {
    ioe.printStackTrace();
    }
    oui vous avez déjà beaucoup fait pour moi
    je ne vous ai pas demandé cela loin de la!! excusez ce mal entendu Mr
    juste une chose c'est que vous n'avez pas défini la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    readPart(Part part)
    et encore Merci pour tout Mr

  19. #19
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par gerxwcv Voir le message
    juste une chose c'est que vous n'avez pas défini la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    readPart(Part part)
    Bah, j'ai pas mis le code complet de la méthode, mais j'ai pas mal détaillé quand même :


    Citation Envoyé par joel.drigo Voir le message
    Pour readPart(Part part), on va traiter chaque partie séparément, mais de la même façon

    Tout d'abord, il faut déterminer ce qu'il y a dans une partie : du texte, du html, un attachement (pièce jointe en français)...

    Pour faire ça il faut appeler les méthodes getDisposition() et getContentType() de la classe Message et tester la valeur retournée :

    - si getDisposition() retourne null on est dans le cas du message
    - si getDisposition() retourne Part.ATTACHMENT on est dans le cas d'un attachement
    - si getDisposition() retourne Part.INLINE on est dans le cas d'un élément dans un texte (comme une image au milieu du texte du mail)


    si part.getDisposition()==null :

    - si le content type est "text/plain", l'instance retournée par getContent() est une String et il s'agit d'un texte
    - s'il s'agit de "text/plain; charset="<un nom de charset>", il s'agit d'un texte mais encodé dans un encodage particulier : je ne me souviens plus si getContent() te retourne la String bien décodée, ou s'il ne faut pas récupérer le stream par getInputStream et lire avec un charset (par exemple avec un InputStreamReader en parsant le charset pour le passer en argument)
    - s'il s'agit de text/html, c'est pareil, sauf que la chaine récupérée contiendra du html

    si Part.ATTACHMENT.equals(part.getDisposition()) :
    Il suffit de récupérer le part.getInputStream() et le copier dans un FileOutputStream(new File(dossierDeSauvegarde,part.getFileName()))avec la technique habituelle de copie de inputstream vers outputstream (enfin ça dépend de la façon de gérer : si tu ne fais qu'afficher le mail dans une JFrame par exemple, tu peux lire les images attachées directement par ImageIO.load(...) pour les afficher directement (ou tu affiches plutôt des icônes (en fonction du contenttype par exemple) et un bouton télécharger les pièces jointes)

    si Part.INLINE.equals(part.getDisposition()) c'est comme pour Part.ATTACHMENT, mais il y aura une référence à ce fichier dans un des textes
    par exemple un <IMG> dans un html : il faudra éventuellement modifier le src dans ce cas pour qu'il pointe vers le path du fichier en fonction de l'endroit ou tu vas sauvegarde le fichier (ou sauvegarder le html exactement à l'endroit du fichier et utiliser un src relatif)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2013
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Bah, j'ai pas mis le code complet de la méthode, mais j'ai pas mal détaillé quand même :
    Mr ca marche
    Merci pour tout ce que vous avez fait
    sans des gens comme vous, ce site ne vaut rien
    Merci encore
    problème résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/10/2012, 14h23
  2. Pièces jointes et Outlook 2000
    Par Nico118 dans le forum Outlook
    Réponses: 15
    Dernier message: 13/01/2011, 17h19
  3. [javamail] envoi mail avec message en pièce jointe
    Par k4eve dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 16/11/2007, 11h17
  4. Envoi d'un mail avec fichier en pièce jointe
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 16h30
  5. affichage des pièces jointe sous outllook 2000
    Par darkbm dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 29/10/2003, 11h32

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