Jakarta ee JMS邮件服务器的字符编码问题

Jakarta ee JMS邮件服务器的字符编码问题,jakarta-ee,jms,mail-server,Jakarta Ee,Jms,Mail Server,当内容带有重音字符时,我在使用JMS发送电子邮件时遇到问题 消息被推送到队列并作为对象消息放置。侦听器侦听消息并将其发送到邮件服务器 在我的本地服务器上一切正常。但是,当我在Solaris生产服务器上运行相同的操作时,重音字符变得混乱。在电子邮件内容中,它打印De Le�n代表德莱昂。基本上,重音字符不会被编码,而是显示一个问号[�]. 非常感谢您在这个问题上的任何帮助。下面是我用来传递消息的代码 private void sendEmailMessage(EmailBean emailBean

当内容带有重音字符时,我在使用JMS发送电子邮件时遇到问题

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

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

以防万一,它可能会帮助其他人:

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

上面的代码更改修复了我的问题。

您的问题最有可能出现在调用
emailBean.setBody(messageBody)的代码中
,因为此时您的邮件正文已经编码。Hmmm….EmailBean是一个简单的pojo,带有“private String body;”变量。因此,我将body变量设置为字符串格式的html文本。