Unicode字符和Spring JavaMailSenderImpl,Linux下没有Unicode字符!

Unicode字符和Spring JavaMailSenderImpl,Linux下没有Unicode字符!,spring,unicode,jakarta-mail,Spring,Unicode,Jakarta Mail,我正在使用Spring和JavaMailSenderImpl,一个著名的Spring类来发送电子邮件。我的电子邮件包含很多unicode字符,比如èè或最显著的是可怕的欧元符号。我的课程在windows上运行时运行良好。发送的电子邮件包含所有字符(纯文本,无html)。如果我在Linux虚拟服务器上安装我的应用程序,我将获得所有?而不是特殊的字符。是Spring、Java配置还是其他什么 更新 基本上,架构是这样的:有一个SpringWeb应用程序,我使用SpringJavaMailSender

我正在使用Spring和JavaMailSenderImpl,一个著名的Spring类来发送电子邮件。我的电子邮件包含很多unicode字符,比如èè或最显著的是可怕的欧元符号。我的课程在windows上运行时运行良好。发送的电子邮件包含所有字符(纯文本,无html)。如果我在Linux虚拟服务器上安装我的应用程序,我将获得所有?而不是特殊的字符。是Spring、Java配置还是其他什么

更新

基本上,架构是这样的:有一个SpringWeb应用程序,我使用SpringJavaMailSenderImpl来完成工作。这是servlet上下文中的配置:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="${email.server}" />
    <property name="username" value="${email.server_user}"></property>
    <property name="password" value="${email.server_pass}"></property>
</bean>
均匀设置:

System.setProperty("mail.mime.charset", "utf8");

在应用程序启动时并不能解决这种情况。事实上,在我开始工作之前?现在我得到的不是€�...

问题可能是在字节数组(例如从文件读取)和
java.lang.String
之间进行转换时。你能详细介绍一下你的应用程序的体系结构吗?

我正在发布解决方案

首先确保源代码的编码(如果有内联文本)。在eclipse中,如果选择项目属性,则第一个屏幕是。警告:如果您以后更改它,它将使您的文本混乱

Second最好使用MimeMailMessage,以便指定编码,如下所示:

MimeMessage msg = mailSender.createMimeMessage();

        msg.addRecipient(RecipientType.TO, new InternetAddress(adminEmail));
        msg.addFrom(new InternetAddress[] { new InternetAddress(adminEmail) });

        msg.setSubject(subject, "UTF-8");
        msg.setText(message, "UTF-8");  
        mailSender.send(msg);
System.setProperty("mail.mime.charset", "utf8");
Third确保系统属性
mail.mime.charset
设置为UTF-8,可以通过Java命令,也可以通过如下代码:

MimeMessage msg = mailSender.createMimeMessage();

        msg.addRecipient(RecipientType.TO, new InternetAddress(adminEmail));
        msg.addFrom(new InternetAddress[] { new InternetAddress(adminEmail) });

        msg.setSubject(subject, "UTF-8");
        msg.setText(message, "UTF-8");  
        mailSender.send(msg);
System.setProperty("mail.mime.charset", "utf8");

感谢所有帮助我解决这个问题的人。

在我的例子中,我通过指定JavaMailSenderImpl的defaultEncoding解决了编码问题:

mailSender = new JavaMailSenderImpl();
...
mailSender.setDefaultEncoding("UTF-8");
我相信您也可以在bean配置中设置值:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    ...
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

...

也不是真正的答案,但您检查过linux用户的
语言环境了吗?可能是使用了不支持那些字符的LANG,你给我们看了初始化
message
变量的代码吗?它只是一个普通字符串。。。不管怎样,我正在发布解决方案。不,我没有阅读任何文件。文本在源代码中是字符串常量,所以它是UTF(我想…)…它是Maven项目吗?您需要根据指定源编码。Ant可能也有类似的功能。我一直在考虑将mail.mime.charset设置为UTF-8,这样就足够了吗?您需要提供更多关于应用程序架构的信息(编辑您的问题),还可以在调用JavaMailSenderImpl的地方发布一些代码吗?它说我需要等待21个小时。。。Huuuubeen在Windows上工作,也有类似的问题。标题和内容混乱的字符。使用MIMessageHelper设置标题和内容是原因,即使在那里设置了utf-8编码。切换到具有UTF-8规范的普通mimessage.setText和.setSubject.msg.setSubject(主题“UTF-8”);第二个参数已经不存在了,任何新的更新都可以用新版本的API解决这个问题。没错,在bean配置中设置值也可以。