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 :

[Java mail] probleme de cast


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut [Java mail] probleme de cast
    Bonjour,

    J ' ai un probleme concernant la reception des messages via une connexion imap
    Lorsque j essaie de recuperer les messages d ' une INBOX , j ' obtiens cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	com.sun.mail.util.BASE64DecoderStream cannot be cast to java.lang.String
    Voici , le bout de code qui pose probleme:

    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
    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;
        }
      }
    Je pense que c ' est a cause de la methode getContent() qui renvoi un part que je n arrive pas a caster en String
    Merci de votre aide

  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 suppose que ton problème est situé dans le else.

    Ben c'est normal. Tous les types MIME ne sont pas castés en String par Javamail.

    Quand tu travailles sur du com.sun.mail.util.BASE64DecoderStream avec javamail c'est que tu as affaire à une pièce jointe car encodée en Base64.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    En effet.

    Je rajouterais que tu peux utiliser la méthode getDisposition() de bodyPart pour savoir si il y a ou non un attachement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (bodyPart.getDisposition().equalsIgnoreCase(Part.ATTACHMENT)){
    // Tu peux récupérer le nom du fichier et caster en inputStream
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Oki , merci de votre aide
    Comment dans ce cas récupérer uniquement le nom du fichier de la piece jointe?
    Merci bien

    edit:
    j ' ai testé de recuperer le nom dans une liste en verifiant le getDisposition comme ceci
    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
     
    Message[] messages = imapFolder.getMessages();
    for (Message message : messages) {
            Multipart multipart = (Multipart) message.getContent();
     
            for (int x = 0; x < multipart.getCount(); x++) {
                BodyPart bodyPart = multipart.getBodyPart(x);
                String disposition = bodyPart.getDisposition();
     
                if (disposition.equals(BodyPart.ATTACHMENT)) {
                	if (bodyPart.isMimeType("TEXT/PLAIN")){
                		listeMusiques.add((String) bodyPart.getContent());
            		    }
                }
     
            }
    mais elle ne retourne rien

  5. #5
    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
    Regarde dans la doc de MIME, ya un header pour ça, ou au moins un morceau d'un header.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Tu es sûr que tu rentres dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (bodyPart.isMimeType("TEXT/PLAIN")){
    Je pense que t'aurais eu un ClassCastException (comme dans ton post original) car getContent() te renvoie pas de String dans ce contexte.

    Pour t'inspirer de quand tu dois caster en chaine ou non, je te propose de t'inspirer de ce code

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Ok , merci pour ce lien
    J ' ai beaucoup avance avec.
    J ' ai bientôt termine ma partie Imap, mais je bloque encore sur une petite etape
    Je souhaite enregistrer les fichiers joints dans un dossier , mais je bloque car ca ne m ' en enregistre qu ' un seul( alors que j en ai 3 dans ma boite)!
    Après vérification et control , le problème vient de ma seconde boucle for, plus précisément de ma condition i<multipart.getCount() qui renvoi toujours 1 a chaque tour de boucle( i renvoyant toujours 1 , ca explique que un seul fichier soit enregistré)
    D' ou peut venir le problème ?
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    public List<String> recupererMessages() throws IOException, MessagingException
              {
     
            	  initialiserConnexion();
            Message[] messages = monFolder.getMessages();
     
            for (Message message : messages) 
            {
               Object content = message.getContent();
                Multipart multipart = (Multipart) content;
                String chaine=message.getFrom()[0].toString();
                String chaine2=chaine.substring(6,18);
    	    listeMessages.add(chaine2);
    	    listeDates.add(message.getReceivedDate().toLocaleString());
    	    System.out.println(listeMessages);
     
     
                for (int i = 0; i < multipart.getCount(); i++) 
                {
                	System.out.println(multipart.getCount());
                    BodyPart bodyPart = multipart.getBodyPart(i);
                    String disposition = bodyPart.getDisposition();
                    System.out.println("disposition:"+disposition);
     
                    if (disposition != null) 
                    {
     
                    	if((disposition.equalsIgnoreCase(Part.ATTACHMENT) ) || disposition.equalsIgnoreCase(Part.INLINE))
                    	{
     
                    	//System.out.println("sisi");
     
                         if(content instanceof java.lang.String){
                        	bodyPart=(BodyPart)content;
                         } else if(content instanceof Multipart){
                                multipart = (Multipart)content;}
     
                         InputStream is = bodyPart.getInputStream();
                         File f = new File("C:/Documents and Settings/EddayanH/Desktop/test/"+i );
                         FileOutputStream fos = new FileOutputStream(f);
                         byte[] buf = new byte[4096];
                         int bytesRead;
                         while((bytesRead = is.read(buf))!=-1) {
                             fos.write(buf, 0, bytesRead);
                         }
     
                        // fos.flush();
                         fos.close();
     
                    	//sauvegardeFichier(bodyPart);
                        System.out.println("FileName:"+bodyPart.getFileName());
                        System.out.println("Content:"+bodyPart.getContent());
                        System.out.println("Attachment type::" + bodyPart.getContentType());
     
     
                    	}
                    }
     
                 }
     
            	}
            return listeMessages;
              }
    Merci beaucoup de votre aide

Discussions similaires

  1. java mail probleme
    Par aminaR dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 04/12/2009, 18h26
  2. probleme de cast en java.Node
    Par azer706 dans le forum Débuter
    Réponses: 8
    Dernier message: 27/08/2009, 14h19
  3. probleme avec java mail
    Par hypothese dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 23/09/2008, 22h04
  4. probleme sur l'api java.mail
    Par hamster. dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 16/07/2008, 09h40
  5. Probleme de cast java.lang.ClassCastException
    Par pracede2005 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 18/05/2007, 12h15

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