Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unicode chars and Spring JavaMailSenderImpl, no unicode chars under Linux!

I'm using Spring and JavaMailSenderImpl, a famous spring class to send emails. My emails contain a lot of unicode chars like èéàò or most notably the dreaded € symbol. My classes work fine when the run on windows. The emails sent are with all the chars (plain text, no html). If I install my app on a Linux virtual server, I'll get all ? instead of the special chars. Is it Spring, Java configuration or something else?

Update

Basically the architecture is this: there is a Spring Web Application and I use spring JavaMailSenderImpl to get the work done. This is the configuration in 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>

I'm using the same host on windows and linux to send mail (that is not the same machine where the application runs on... It is just a standard mail service provider over SMTP).

The code I use to send the email is simply:

SimpleMailMessage msg = new SimpleMailMessage();
            msg.setTo(adminEmail);
            msg.setFrom(adminEmail);
            msg.setSubject(subject);
            msg.setText(message);
            mailSender.send(msg);

Even setting:

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

at application startup doesn't solve the situation. In fact, before I was getting ? instead of €, now I get �...

like image 220
gotch4 Avatar asked Apr 12 '11 13:04

gotch4


1 Answers

In my case, I resolved the encoding problem by specifying JavaMailSenderImpl's defaultEncoding:

mailSender = new JavaMailSenderImpl();
...
mailSender.setDefaultEncoding("UTF-8");

I believe you can also set the value in bean configuration:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    ...
    <property name="defaultEncoding" value="UTF-8"/>
</bean>
like image 132
Mr. 14 Avatar answered Oct 13 '22 23:10

Mr. 14