使用javax.mail在电子邮件中发送笑脸/表情符号

时间:2017-06-08 11:46:55

标签: java javamail emoticons

我正在尝试使用javax.mail API发送的电子邮件中发送带有文本的笑脸。

当我在unescaping之后输出unicode时,它会在控制台上给出正确的笑脸,但在邮件中显示“?” (问号)。

以下是我尝试的方法:
Unicode字符串:\ u0048 \ u0020 \ 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在控制台上将正确的消息打印为“Hi”,而在电子邮件中则显示为“Hi ????”。

属性props = new Properties();

        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);

以上是我的邮件服务。如何在电子邮件中正确发送笑脸/表情符号? 请帮忙。

1 个答案:

答案 0 :(得分:2)

按照@RealSkeptic的建议完成,如下:

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