【发布时间】:2015-05-21 21:37:13
【问题描述】:
当内容包含重音字符时,我在使用 JMS 发送电子邮件时遇到问题。
消息被推送到队列中并作为对象消息放置。侦听器侦听消息并将其传递到邮件服务器。
在我的本地服务器上一切正常。但是,当我在 Solaris 生产服务器上运行相同的程序时,重音字符会变得混乱。在电子邮件内容中,它会为 De León 打印 De Le�n。基本上,重音字符不会被编码并显示一个问号 [�]。
非常感谢您对此问题的任何帮助。下面是我用来传递消息的代码。
private void sendEmailMessage(EmailBean emailBean) {
System.out.println("SendReceivedEmailMessages::sendEmail()");
try {
if (emailBean.getFromAddresses() != null && !emailBean.getFromAddresses().isEmpty()) {
Properties existingProperties = session.getProperties();
existingProperties.put("mail.from", emailBean.getFromAddresses());
session = Session.getInstance(existingProperties);
}
String DELIMITER = ";";
String subject = emailBean.getSubject();
String msgText = emailBean.getBody();
MimeMessage message = new MimeMessage(session);
message.setSubject(subject);
message.setContent(message, "text/html");
InternetAddress[] toAddressList = parseRecipients(emailBean.getToAddresses(), DELIMITER);
InternetAddress[] ccAddressList = parseRecipients(emailBean.getCcAddresses(), DELIMITER);
InternetAddress[] bccAddressList = parseRecipients(emailBean.getBccAddresses(), DELIMITER);
message.setRecipients(javax.mail.Message.RecipientType.TO, toAddressList);
message.addRecipients(javax.mail.Message.RecipientType.CC, ccAddressList);
message.addRecipients(javax.mail.Message.RecipientType.BCC, bccAddressList);
Multipart multipart = new MimeMultipart();
if (emailBean.getFileByteArrRegular() != null) {
addAttachmentFiles(multipart, emailBean.getFileByteArrRegular(), emailBean.getFilename() + "_Regular.docx", msgText);
}
if (emailBean.getFileByteOthers() != null) {
addAttachmentFiles(multipart, emailBean.getFileByteOthers(), emailBean.getFilename() + ".docx", msgText);
} else {
addAttachmentFiles(multipart, null, null, msgText);
}
message.setContent(multipart);
Transport.send(message);
} catch (MessagingException ex) {
Logger.getLogger(SendReceiveEmailMessages.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
Logger.getLogger(SendReceiveEmailMessages.class.getName()).log(Level.SEVERE, ex.getStackTrace()[0].toString(), ex);
} catch (Exception ex) {
Logger.getLogger(SendReceiveEmailMessages.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
Logger.getLogger(SendReceiveEmailMessages.class.getName()).log(Level.SEVERE, ex.getStackTrace()[0].toString(), ex);
}
}
【问题讨论】:
-
您的问题很可能出在调用
emailBean.setBody(messageBody)的代码中,因为此时您的消息正文已被编码。 -
嗯.... EmailBean 是一个简单的 pojo,带有“private String body;”多变的。因此,我设置为 body 变量的只是字符串格式的 html 文本。
标签: jakarta-ee jms mail-server