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 :

Est-ce que cette chaîne est du HTML?


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut Est-ce que cette chaîne est du HTML?
    Bonjour à tous,

    J'ai une chaîne qui contient une partie d'un fichier (ce fichier est composé de plusieurs parties : du plain text, du html, du codage, ..). Pour ceux qui l'auront déjà compris, c'est effectivement un mail.

    J'ai justement besoin de savoir si ce que j'ai récupéré est du HTML.

    Pensant que toutes les parties HTML commençaient par une balise, j'ai fait un teste tout con qui consistait à tester si le premier caractère est un '<'.

    Comme c'est tout con, ça n'a pas marché, et c'est normal!

    La raison est que j'ai des parties HTML sous la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bonjour,<p>nous avons bien reçu votre commande.
    Du coup je me demandais comment faire pour être sûre à tous les coups?

  2. #2
    Membre du Club

    Inscrit en
    Janvier 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 44
    Points : 64
    Points
    64
    Par défaut
    Bonjour Amelia

    Mieux vaut t'appuyer sur les RFC qui existe au sujet des mails multipats :
    http://en.wikipedia.org/wiki/MIME#Multipart_messages

    pour prendre un exemple
    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
     
    MIME-Version: 1.0
    Content-Type: multipart/mixed; boundary="frontier"
     
    This is a message with multiple parts in MIME format.
    --frontier
    Content-Type: text/plain
     
    This is the body of the message.
    --frontier
    Content-Type: application/octet-stream
    Content-Transfer-Encoding: base64
     
    PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
    Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
    --frontier--
    Dans ton cas tu chercheras Content-Type: text/html jusqu'à --fronter pour capturer la partie qui t'interesse.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Bonjour Michaelcourcy,
    Merci pour ta réponse.

    Justement j'utilise l'API JavaMail pour extraire les parties d'un mail. Au fait cette API possède une méthode qui permet d'exraire toutes les parts d'un multipart, et moi je l'utilise de manière récursive de sorte à extraire toutes les parties qui ne sont pas des multiparts (les feuilles). Ce qui aboutit finalement à des parties simples du type text/plain, text/html, img/gif ..

    Mais le problème c'est que cette API travaille avec la classe String pour tout ce qui est texte (text/plain, text/html,..) et avec les InputStream pour tout ce qui est flux (image, son, ..).

    Du coup, je ne sais pas si le String extrait c'est du plain text ou bien du HTML.

    Des idées?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    L'API de Javamail ne te fournit pas cette information ??

    a++

  5. #5
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    toutes les parties renvoyées par javamail implémentent l'interface "Part". T'a juste a appeler la méthode getContentType et tu saura ce que c'est.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Bonjour,
    Voici mon code (globalement, sans les détails) qui permet d'extraire les parties d'un message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void ExtractContentParts(Object o){
     
    if (o instanceof Multipart){
                      Multipart mp = (Multipart)o;                        
                      for (int j = 0; j < mp.getCount(); j++) {
                                   BodyPart b = mp.getBodyPart(j);
                                   String mimeType2 = b.getContentType();                
                                   ExtractContentParts(b.getContent());
                                     }
    }else if(o instanceof String){
                         String MsgHtmlOuPlain=(String)o; // là ce n'est plus un Part u coup je ne peux pas faire o.getContentType()
    }else if (o instanceof InputStream){
          InputStream  MonImageOuSonOuAutreChose=(InputStream) o;
    }
    L'appel de cette fonction se fait en lui passant le mail en objet MimeMessage avec l'instruction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExtractContentParts(m.getContent())
    Voici la déclaration de mon message:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MimeMessage m=new MimeMessage(null,new FileInputStream(new File("mailmario.eml")));

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Donc comme je l'ai dis dans un commentaire au niveau de mon code, je ne peux pas avoir le ContentType puisque la Part que je récupère est de type String.
    Des idées?

  8. #8
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par amelia Voir le message
    Des idées?
    Comme tu travaille en récursive, il pourrait être judicieux de passer le mime type à la méthode, puisque tu l'a!

    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
     
    void ExtractContentParts(Object o, String mimeType){
     
    if (o instanceof Multipart){
                      Multipart mp = (Multipart)o;                        
                      for (int j = 0; j < mp.getCount(); j++) {
                                   BodyPart b = mp.getBodyPart(j);
                                   String mimeType2 = b.getContentType();                
                                   ExtractContentParts(b.getContent(), mimeType2);
                                     }
    }else if(o instanceof String){
                         String MsgHtmlOuPlain=(String)o; // maintenant, on connait le mimetype, c'est plsu facile!
    }else if (o instanceof InputStream){
          InputStream  MonImageOuSonOuAutreChose=(InputStream) o;
    }

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    Salut tchize_,
    Merci pour ta réponse! Mais comment n'y ai-je pas pensé? C'est exactement ce qu'il fallait faire!
    Merci

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

Discussions similaires

  1. Est-ce que cette conception est correcte ?
    Par RAPTISTA dans le forum Schéma
    Réponses: 1
    Dernier message: 02/07/2008, 18h43
  2. [MySQL] est ce que cette méthode est juste
    Par info_sara dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 13/06/2008, 20h08
  3. Est ce que cette requête est possible ?
    Par dubidon dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/06/2007, 11h24
  4. est ce que mon proxy est sécurisé avec cette config?
    Par kerkennah dans le forum Sécurité
    Réponses: 1
    Dernier message: 23/05/2007, 17h45
  5. Est-ce que cette ligne est obligatoire ? (<!DOCTYPE html.
    Par cvb dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 11/12/2005, 00h07

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