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] encoding sous MAC


Sujet :

API standards et tierces Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut [JavaMail] encoding sous MAC
    Salut à tous!

    Voilà mon soucis, j'ai créé une classe pour envoyer des mails à des utilisateurs depuis gmail, tout se passe bien quand je suis sous windows avec ce code :

    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
     
    ...
    Properties props = new Properties();
    props.put("mail.smtp.user", email);
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", String.valueOf(port));
    props.put("mail.smtp.starttls.enable","true");
    props.put("mail.smtp.debug", "true");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.socketFactory.port", String.valueOf(port));
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.socketFactory.fallback", "false");
     
    Authenticator auth = new javax.mail.Authenticator() {
    	protected PasswordAuthentication getPasswordAuthentication() {
    		return new PasswordAuthentication(email,password);
    	}
    };
     
    Session session = Session.getInstance(props, auth);
    session.setDebug(true);
     
    Message msg = new MimeMessage(session);
     
    msg.setText(message);
     
    msg.setSubject(subject);
    msg.setFrom(new InternetAddress(email));
     
    msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
     
    Transport transport = session.getTransport("smtps");
    transport.connect(host, port, username, password);
    transport.sendMessage(msg, msg.getAllRecipients());
    transport.close();
    Mais dès que je déploye mon appli sous Mac OS, les mails envoyés transforment les é en Ž, les ô en ™, etc. donc c'est assez gênant! J'ai essayé de changer le type d'envoi dans gmail pour le forcer à envoyer en UTF-8 mais le résultat est toujours le même, donc mon problème doit provenir de Mac OS... Mais j'ai pas la moindre idée d'où faire le changement, si c'est au niveau système ou dans mon appli... Pour commencer, est-ce que le fait de rajouter cette ligne pourrait améliorer mon mail?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Message msg = new MimeMessage(session);
    msg.setHeader("Content-Type", "text/plain; charset=UTF-8");
    msg.setText(message);
    Merci d'avance et bon weekend à tous!

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par Sebeee Voir le message
    Mais dès que je déploye mon appli sous Mac OS, les mails envoyés transforment les é en Ž, les ô en ™, etc. donc c'est assez gênant! J'ai essayé de changer le type d'envoi dans gmail pour le forcer à envoyer en UTF-8 mais le résultat est toujours le même, donc mon problème doit provenir de Mac OS... Mais j'ai pas la moindre idée d'où faire le changement, si c'est au niveau système ou dans mon appli... Pour commencer, est-ce que le fait de rajouter cette ligne pourrait améliorer mon mail?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Message msg = new MimeMessage(session);
    msg.setHeader("Content-Type", "text/plain; charset=UTF-8");
    msg.setText(message);
    Merci d'avance et bon weekend à tous!
    Il faut surtout que l'encoding que vous spécifiez dans le setHeader corresponde au contenu de la variable "message".
    Si par exemple, vous avez construit votre message à partir de templates - donc de fichiers créés sur votre plate-forme de développement sans trop faire attention aux settings de votre IDE - il y a de fortes chances que votre IDE les ait créés avec l'encoding par défaut de la plate-forme sur laquelle vous travaillez… soit sans doute latin-1 sous Windows…

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Ahaaaa... je ne connaissais pas cette histoire!

    Ok donc je viens de changer mon encodage par défaut à UTF-8 dans Eclipse, je vais donc recompiler et redéployer mon application.

    Merci du tuyau, je vais essayer ca.

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Bonjour,

    Citation Envoyé par JeitEmgie Voir le message
    Il faut surtout que l'encoding que vous spécifiez dans le setHeader corresponde au contenu de la variable "message".
    La variable "message" n'a pas de notion d'encoding. C'est une String, une séquence de caractères, c'est tout.

    D'ailleurs comme le dit la javadoc de MimeMessage.setText(String):
    If the string contains non US-ASCII characters. it will be encoded using the platform's default charset.
    Et le par défaut charset doit être différent entre Windows et Mac OS.

    La solution serait peut être de spécifier le charset explicitement avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setText(message, "UTF-8")

    Et au passage, changer l'encodage dans Eclipse, si c'est dans les propriétés d'un fichier java ou d'un dossier source ça ne change que l'encoding des fichiers sources. Ca n'a pas d'influence à l'exécution.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Vous n'avez pas compris : l'encoding par défaut de l'IDE est appliqué à tous les fichiers de type texte créés dans ce contexte, si cela ne change rien aux fichiers sources Java, cela a son importance pour des fichiers de données (comme par exemple des templates utilisés pour générer le texte d'un mail…)
    en fonction de la manière dont ils seront relus par le code Java, surtout si l'on utilise les fonctionnalités par défaut sans spécifier l'encodage - qui souvent utiliseront le défaut de la plate-forme, et c'est là que des problèmes d'encoding en changeant de plate-forme surviennent.
    Donc quand je parle de l'encoding de la variable "message" c'est bien entendu de l'encoding de l'éventuel fichier dont la lecture sans précaution aurait servi à sa création, mais si "message" ne provient pas de données externes au code Java, il n'y a évidemment pas de raison qu'il y ait un problème à ce niveau.
    (et en conséquence recompiler le code Java en changeant l'encoding par défaut de l'IDE ne changera rien…
    c'est l'encoding d'éventuel fichiers de données déjà créés dans l'IDE ou dans un autre éditeur qui peut être la source de problèmes et qu'il faut vérifier)

    Donc selon le problème tel que décrit,
    soit le "message" provient d'une source externe dont la relecture compte sur un défaut qui change avec la plate-forme et vous devez vérifier les méthodes de relecture des fichiers pour spécifier le bon encoding (celui qui a prévalu à leur création…),

    soit le "message" est entièrement construit dans la JVM et alors c'est une différence entre l'encoding supposé comme étant le défaut de la plate-forme et celui associé au mail, et donc là aussi il faut passer par les méthodes qui prennent un encoding en paramètre plutôt que celles qui assument un défaut "aléatoire".
    (sinon vous allez régler le problème pour Mac et puis vous en aurez un autre sous un autre OS…)

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Ok je situe mieux le problème.

    A propos de ma variable "message", elle provient de fichier .properties la majeure partie du temps (c'est un WS appelé par plusieurs classes différentes).

    Je vais faire des tests là dessus aujourd'hui, merci de vos conseils en tout cas.

Discussions similaires

  1. [javamail] Problème de pièce jointe sous mac
    Par Esteban72 dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 06/12/2010, 11h54
  2. détecter os 9 ou 10 sous mac
    Par taly dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2005, 09h56
  3. [C++] Programmation C++ sous Mac
    Par reggae dans le forum Développement OS X
    Réponses: 2
    Dernier message: 09/10/2005, 12h10
  4. lbrairie glui sous mac
    Par milliet dans le forum OpenGL
    Réponses: 6
    Dernier message: 05/05/2005, 14h58

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