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 :

Erreur d'encodage de mail avec javax


Sujet :

Java

  1. #1
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut Erreur d'encodage de mail avec javax
    Bonjour,

    J'ai une application Java qui récupère des péramètres URL en provenance d'une autre application non Java. Certains de ces paramètres contiennent des accents (on a du mal à l'éviter en français). Mon idée était donc de décoder ces paramètres et les envoyer par mail grâce à la fonction Javax. Le problème c'est qu'à récéption du mail, tous les cactères un peu spéciaux tels que é, è, à... ne s'affichent pas correctement.
    Mon idée a donc été d'encoder le contenu du mail en UTF-8 mais sans aucun résultalt.
    Le code est le suivant:

    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
    Properties p = new Properties();
    p.put("mail.transport.protocol", "smtp");
    p.put("mail.smtp.host", "x.x.x.x");
    p.put("mail.smtp.port", "y");
    Session session = Session.getInstance(p);
    session.setDebug(false);
     
    //	  Define email properties
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress("blablabla[at]domain.com"));
     
    message.addRecipient(Message.RecipientType.TO, new InternetAddress( "adresse_mail");	
     
    // Define email subject
    message.setSubject("my subject", "UTF-8");
     
    //	 define email content
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    String content = wdContext.currentContextElement().getLeMail(); // code qui me permet de recuperer les donnes a inserer dans le mail
    String content2 = URLDecoder.decode( content, "UTF-8" ); // je decode les donnees passees en URL pour afficher les accents
     
    messageBodyPart.setText(content2);
     
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    message.setContent(multipart);
     
    //	Send message
    Transport.send(message);
    Voyez-vous un quelconque problème dans tout ça ?

    Merci pour votre aide.

    T

  2. #2
    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 804
    Points
    48 804
    Par défaut
    En pratique, content contient quoi?

  3. #3
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    En pratique, content contient le contenu du mail. Content est une variable dans laquelle je vais importer les données de type String enregistrées dans un contexte. Ce sont ces données qui sont formatés avec des retour chariots et insérées dans content. Ces données peuvent contenir des accents, dont le formatage n'est pas restitué de manière correcte.

  4. #4
    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 804
    Points
    48 804
    Par défaut
    on peut avoir un exemple? Parce que là je ne vois pas vraiment pourquoi tu le fait passer dans URLDecode. C'est fait pour des urls, pas du texte brut cette méthode.

  5. #5
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Par exemple, dans la zone de saisie de ma première application, je saisi le texte suivant:
    éèçà

    Dans mon application Java je récupère le texte suivant:
    comentaire relevé: '����

    Et dans me mail reçu j'obtiens les mêmes caractères.... Il y a donc un problème d'encodage. MAis comment savoir si ça vient de mon programme Java ou bien de l'autre application (pour laquelle je n'ai pas accès au code source...) ?

  6. #6
    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 804
    Points
    48 804
    Par défaut
    déjà, urldécode dans ce genre de cas ne va te servir à rien. Urldecode, ca transforme ceci %E9 en é (si ico 8859-1), bref les %XX sont transformés.

    Dans ton cas, je suggère de commencer par regarder ce qu'il y a dans wdContext.currentContextElement().getLeMail() (de préférence avec une console de debug eclipse ou netbean, les console de sortie pure texte est system.out.println ayant tendance à poser parfois de problème d'encoding eux-même. A mon avis ton problème est à chercher dans le code de "getLeMail". Ton code d'envoi en lui même (si on retire ce urldecode) m'a l'air correct.

  7. #7
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Je ne suis pas tout à fait d'accord avec toi. Cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String content = wdContext.currentContextElement().getLeMail();
    Me permet d'afficher le contenu de la variable lLeMail qui est une variable de mon contexte, et au démarrage de l'application, lorsqu'elle est lancée, elle récupère les paramètres URL et les enregistre grâce à la fonction. Ce n'est donc qu'un accesseur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String content = wdContext.currentContextElement().setLeMail("Ma chaine de caractères");
    Pour tester le résultat de l'affichage, j'utilise la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    messageMgr.reportSuccess("comentaire relevé: " + content );
    Cette fonction me permet d'afficher un message de validation m'informant que l'opération s'est bien passée. J'ai donc un accent sur "relevé", en revanche content ne ressort pas formatté. Je n'utilise pas de system.out.println

  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 804
    Points
    48 804
    Par défaut
    j'ai du mal à suivre, tu balance "ma chaine de caractères" à setLeMail, et que tu fait le get jsute après, les accents sont cassés? donc y a du code qui casse tout dans ce setter. On peux voir le code du setter, du getter et le code appelant le setter?

  9. #9
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Code du setter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setLeMail(java.lang.String value) {
          this._leMail = value;
          changed(1);
        }
    Code du getter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     public java.lang.String getLeMail() {
          return _leMail;
        }
    Et le code qui appelle le setter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wdContext.currentContextElement().setLeMail(leMail);
    Avec pour leMail une chaine de caractères formatée dans laquelle j'insère des mots avec des caractères accentués.

    Les getter et setter sont générés automatiquement par mon outil, donc je ne pense pas qu'il y ait de problème de ce côté là.

  10. #10
    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 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wdContext.currentContextElement().setLeMail(leMail);
    On tourne en rond, la partie intéressante c'est la manière dont tu génère "leMail", qui contient les caractères érronés.

  11. #11
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    Voici le code complet de la gestion de ma variable leMail :

    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
    leMail = leMail
    + "\n"
    + "Reference Client : "
    + request.getParameter("RefClient")
    + "\n"
    + "Nom client : "
    + WDClientUser.getLoggedInClientUser().getSAPUser().getFirstName()
    + " "
    + WDClientUser.getLoggedInClientUser().getSAPUser().getLastName()
    + "\n"
    + "Numéro client : "
    + WDClientUser.getLoggedInClientUser().getSAPUser().getDepartment()
    + "\n"
    + "\n"
    + "Date Commande : "
    + request.getParameter("DateComm")
    + "\n"
    + "Commande Fournisseur : "
    + request.getParameter("CommF")
    + "\n"
    + "Designation produit : "
    + request.getParameter("DProduit")
    + "\n"
    + "Quantite (Unite vente) : "
    + request.getParameter("QT")
    + " ("
    + request.getParameter("UV")
    + ")"
    + "\n"
    + "Date de livraison souhaitée : "
    + request.getParameter("DateLiv")
    + "\n"
    + "Commentaire : "
    + URLDecoder.decode( request.getParameter("Comment"))

  12. #12
    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 804
    Points
    48 804
    Par défaut
    Si la requete est en GET ca peux effectivement poser problème.

    Assure toi que tous les éléments suivant sot cohérents:

    1) L'encodage du document dans lequel se trouve le formulaire est X (X étant un encodage au choix)
    2) le formulaire a bien, dans son <form> le accept-charset défini à ce même X
    3) le conteneur webapp que tu utilise est bien configuré pour utiliser, par défaut, X pour le décodage des requetes
    4) tu ne fait pas de request.setCharacterEnconding() a une valeur différente de X
    4) le request.getCharacterEncoding() te retourne bien X


    Si il y a incohérence à un niveau, les requetes peuvent être mal décodées dans request.getParameter(), et tu te traine après du texte cassé.


    Comme je vois que tu as des accents dans tes String java, hardcodée, peux tu nous dire si, ces accents là, sont corrects dans l'email?

  13. #13
    Membre régulier Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Points : 80
    Points
    80
    Par défaut
    En fait l'application qui récupère les données et gère l'interface utilisateur est développée en Flash/Flex et je n'ai pas accès au code source, et donc je ne peux pas gérer l'encodage. Je ne gère donc pas de <form>. Je travaille sur un environnement WAS Java SAP, et donc je n'ai pas tout à fait la même architecture que les architecturre J2EE. Quand aux String qui sont hardcodées dans le mail, elles ressortent bien de manière correcte, donc le problème vient bien de mes données !!

  14. #14
    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 804
    Points
    48 804
    Par défaut
    donc c'est un problème d'encodage du POST ou GET de ton flash qui ne correspond pas à l'encodage prévu par ton conteneur. Faut donc soit configurer ton conteneur pour qu'il prennet l'encodage correct, soit faire changer le flash, soit faire un request.setContentEncoding() en espérant que ça suffise (si la requête a déjà été parsée, c'est cuit).

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

Discussions similaires

  1. [AC-2007] Envoi mail avec cdoSendmail: erreur de transport
    Par tAKAmAkA dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/12/2018, 12h04
  2. [Configuration] Erreur lors d'envoie de mail avec PHP
    Par ostie127 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 05/02/2008, 18h35
  3. [PHPMailer] Erreur lors d'un envoi d'un mail avec pièce jointe à destination de gmail
    Par arezki76 dans le forum Bibliothèques et frameworks
    Réponses: 15
    Dernier message: 14/08/2007, 18h18
  4. Problème avec javax/mail
    Par mahhour dans le forum NetBeans
    Réponses: 1
    Dernier message: 18/07/2007, 13h12
  5. [Mail] Envoyer un mail avec retour d'erreur
    Par phpaide dans le forum Langage
    Réponses: 1
    Dernier message: 19/04/2006, 15h49

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