我正在使用Spring和JavaMailSenderImpl,一个着名的Spring类来发送电子邮件。我的电子邮件中包含很多像èéàò这样的unicode字符,或者最引人注目的是可怕的符号。在Windows上运行时,我的类工作正常。发送的电子邮件包含所有字符(纯文本,无HTML)。如果我在Linux虚拟服务器上安装我的应用程序,我会得到所有?而不是特殊的字符。是Spring,Java配置还是别的什么?
更新
基本上,架构是这样的:有一个Spring Web应用程序,我使用spring JavaMailSenderImpl来完成工作。这是servlet-context中的配置:
<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>
我在Windows和Linux上使用相同的主机发送邮件(这与运行应用程序的机器不同......它只是SMTP上的标准邮件服务提供商)。
我用来发送电子邮件的代码很简单:
SimpleMailMessage msg = new SimpleMailMessage();
msg.setTo(adminEmail);
msg.setFrom(adminEmail);
msg.setSubject(subject);
msg.setText(message);
mailSender.send(msg);
甚至设置:
System.setProperty("mail.mime.charset", "utf8");
应用程序启动时无法解决问题。事实上,在我到来之前?而不是€,现在我得到了 ...
答案 0 :(得分:18)
就我而言,我通过指定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>
答案 1 :(得分:14)
我正在发布解决方案。
首先确保源代码的编码(如果有内联文本)。如果选择项目属性,eclipse是第一个屏幕。警告:如果您稍后更改它会使您的文本乱码。
第二最好使用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);
第三次确保系统属性mail.mime.charset
设置为UTF-8,可以是Java命令,也可以是这样的代码:
System.setProperty("mail.mime.charset", "utf8");
感谢所有帮助我解决问题的人。
答案 2 :(得分:0)
当你在一个字节数组(例如从文件中读取)和java.lang.String
之间进行转换时,问题可能就出现了。您能否详细介绍一下您的应用程序架构?