2015-03-18 59 views
0

当内容具有重音字符时,使用JMS发送电子邮件时发生问题。JMS邮件服务器的字符编码问题

消息被推送到队列并作为对象消息放置。监听者收听消息并将其发送给邮件服务器。

一切工作正常我的本地服务器上。但是,当我在Solaris生产服务器上运行相同的操作时,重音字符会变得混乱。在电子邮件内容中,它为DeLeón打印DeLe 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); 
    } 
} 
+0

你的问题很可能是在调用'emailBean.setBody(messageBody)'的代码中,因为你的消息体已经在那个时候编码了。 – 2015-03-19 01:59:29

+0

嗯.... EmailBean是一个简单的pojo与'私人弦乐体;'变量。所以它只是我设置为body变量的字符串格式的html文本。 – 2015-03-19 16:55:27

回答

0

万一它可能会帮助别人:

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

上面的代码改变固定我的问题。