我正在尝试使用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);
以上是我的邮件服务。如何在电子邮件中正确发送笑脸/表情符号? 请帮忙。
答案 0 :(得分:2)
按照@RealSkeptic的建议完成,如下:
msg.setContent(StringEscapeUtils.unescapeJava(message), "text/html; charset=UTF-8");