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 :

[JavaMail API] MimeMessage - getSubject()


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
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Par défaut [JavaMail API] MimeMessage - getSubject()
    Bonjour et merci de prendre la peine de lire mon post!
    Considérons un mail sauvegardé dans un fichier (son source).
    Je lis ce mail dans un objet MimeMessage, comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MimeMessage mimeMail=new MimeMessage(null, new FileInputStream("cheminFichierMail"))
    ensuite, ce que je veux faire c'est extraire l'objet (ou sujet) du mail avec l'instruction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String objet=mimeMail.getSubject();
    mais j'ai un problème d'affichage. Par exemple, pour l'objet : "Votre commande numéro 36140168 - Avis de débit" ce qui est récupéré dans objet c'est "Votre commande numéro 36140168 - Avis de débit".

    J'ai cherché partout, mais pas trouvé comment régler ça.
    Any ideas?

  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
    Vérifie le charset utilisé pour enregistrer ton mail sur le disque. Il faut indiquer à ton programme quel est le charset à utiliser pour interpréter le mail.

    Cf la FAQ pour un problème similaire.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Marco46, nous parlons là de l'API JavaMail, donc pour lire des mails, qui ont leur format propre. Je ne crois pas que l'API JavaMail propose quoi que ce soit pour forcer l'utilisation de tel charset pour telle partie. Si c'est le cas, je ne sais pas où.

    Mon impression (que je ne pourrais conforter qu'en voyant le source du mail) est que le mail ne respecte pas les conventions d'accent, et qu'il n'y a pas grand-chose à faire pour corriger ça.

    (Sauf si tous les mails viennent du même endroit et font tous la même erreur, auquel cas il "suffit" de convertir le sujet lu après coup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String objet=mimeMail.getSubject();
    objet = new String(objet.getBytes("iso-8859-1"), "utf-8");
    )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    Par défaut
    A priori elle n'a pas enregistré correctement le code source du mail puisqu'elle obtient un accent. Il n'y a jamais d'accent dans un code source de mail. Ils sont toujours encodés.

    Donc quand elle enregistre ce qu'elle pense être le code source, elle enregistre en fait le mail converti par l'API Javamail, c'est à dire que les accents sont décodés.

    Le problème d'affichage qu'elle a provient à mon sens d'un problème de paramétrage de charset lors de la lecture du fichier. Bref ça n'a que peu de rapport avec Javamail.

    J'en mettrais pas ma main au feu mais par exemple je testerais en ouvrant le fichier dans notepad++, si les accents s'y affichent correctement alors le problème est dans la lecture du fichier -> aucun rapport avec Javamail.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    A priori elle n'a pas enregistré correctement le code source du mail puisqu'elle obtient un accent. Il n'y a jamais d'accent dans un code source de mail. Ils sont toujours encodés.
    Il ne doit jamais y avoir d'accent, et ils doivent toujours être encodés. Nuance. En pratique personne ne vérifie que c'est respecté.

    Citation Envoyé par Marco46 Voir le message
    Donc quand elle enregistre ce qu'elle pense être le code source, elle enregistre en fait le mail converti par l'API Javamail, c'est à dire que les accents sont décodés.
    Ce n'est pas pour prendre sa défense ou quoi que ce soit, mais comment diable construit-on un MimeMessage à partir d'un fichier contenant un mail déjà décodé ?

    Le raisonnement me paraît alambiqué, mais bon, je manque d'expérience avec JavaMail.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    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
    Il ne doit jamais y avoir d'accent, et ils doivent toujours être encodés. Nuance. En pratique personne ne vérifie que c'est respecté.
    Pour avoir étudié le code source de nombreux mails provenant de différents clients je peux te dire qu'ils respectent tous la norme. Après sur une API X ou Y je dis pas.

    Ce n'est pas pour prendre sa défense ou quoi que ce soit, mais comment diable construit-on un MimeMessage à partir d'un fichier contenant un mail déjà décodé ?
    Pour être plus clair, mimeMail.getSubject() doit gérer tout seul le décodage. Donc ce qu'on obtient c'est la chaine décodée avec les accents.

    Pour avoir le véritable code source du mail il faut utiliser writeTo() de MimeMessage.

Discussions similaires

  1. Envoyer un email sans Intent - JavaMail API
    Par brayanrabat dans le forum Android
    Réponses: 10
    Dernier message: 30/11/2013, 16h26
  2. Récupérer email avec JavaMail API
    Par petitavion414 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 27/07/2007, 16h02
  3. Api Javamail - Eclipse
    Par squalito dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 08/02/2007, 01h32
  4. installer un API (Javamail pour etre précis)
    Par jbjweb dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 13/07/2006, 18h36
  5. [JavaMail]Probleme avec API JavaMail
    Par spk4ever dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 10/04/2006, 16h39

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