2017-06-08 1 views
1

J'essaye d'envoyer le smiley avec le texte dans l'email envoyé using l'API de javax.mail.Envoyer Smiley/Emoticons dans le courrier électronique en utilisant javax.mail

Quand je sysout l'unicode après unescaping, il donne le smiley correct sur la console mais dans le courrier il affiche "?" (point d'interrogation).

Voilà comment je suis en train de le faire:
chaîne Unicode: \ u0048 \ u0069 \ u0020 \ uD83D \ uDE0A \ uD83D \ uDE00 \ uD83D \ uDE01 \ uD83D \ uDE02

String uniMessage = "\u0048\u0069\u0020\uD83D\uDE0A\uD83D\uDE00\uD83D\uDE01\uD83D\uDE02"; 
String message = StringEscapeUtils.unescapeJava(uniMessage); 

Sysout imprime le message correct sur la console comme "Hi" alors que dans l'email il est affiché comme "Hi ????".

Propriétés props = new Propriétés();

 props.put("mail.smtp.auth", "true"); 
     props.setProperty("mail.transport.protocol", "smtp"); 
     props.put("mail.smtp.starttls.enable", "true"); 
     props.put("mail.smtp.host", SMTPHost); 
     props.put("mail.smtp.port", SMTPPort); 
     props.put("mail.smtp.user", username); 
     props.put("mail.smtp.password", password); 
     props.put("mail.smtp.socketFactory.port", SMTPPort); 
     props.put("mail.smtp.socketFactory.fallback", "true"); 

     Session session = Session.getInstance(props, 
       new javax.mail.Authenticator() { 
        protected PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(username, 
           password); 
        } 
       }); 
     session.setDebug(debug); 
     Message msg = new MimeMessage(session); 
     InternetAddress addressFrom = new InternetAddress(username); 
     msg.setFrom(addressFrom); 
     InternetAddress addressTo = new InternetAddress(to); 
     addressTo = new InternetAddress(to); 
     msg.setRecipient(Message.RecipientType.TO, addressTo); 
     msg.addHeader("Demo", "Demo"); 
     msg.setSubject(subject); 
     msg.setContent(message, "text/html"); 
     Transport.send(msg); 

Ci-dessus est mon service de messagerie. Comment envoyer des smileys/émoticônes correctement dans un e-mail? S'il vous plaît aider.

+1

Le type de contenu devrait également inclure un codage de caractères. – RealSkeptic

+0

Vous voulez dire qu'il devrait être msg.setContent (message, "text/html; UTF-8"); ? – User14141111

Répondre

1

Il a été fait comme suggéré par @RealSkeptic comme suit:

msg.setContent(StringEscapeUtils.unescapeJava(message), "text/html; charset=UTF-8");