Cómo configurar el tipo de contenido para los correos electrónicos enviados con el javailPlailsenderImpl de Spring
Pregunta
La pregunta es del sujeto.Estoy usando JavamailsenderInimpl desde Spring 3.0.3.Release y Velocity 1.6.4 para la preparación de correo de la plantilla.
Cuando envío un correo electrónico con caracteres croatas de mi destinatario de WebApp "?"En el soporte de los personajes croatas normales.Si converso el modo de depuración para los correos, Desde el registro puedo ver que tipo de contenido está configurado en:
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
¿Cómo puedo configurarlo para:
Content-Type: text/html; charset=utf-8?
Estoy usando Gmail para enviar por correo mientras estoy desarrollando esta aplicación web.
Aquí están mi configuración en el archivo XML Conf de Spring):
<bean id="userAuthorizationManager" class="com.mypackage.manage.SimpleUserAuthorizationManagerImpl">
<property name="mailSender" ref="mailSender" />
<property name="velocityEngine" ref="velocityEngine" />
<property name="from" value="address" />
<property name="authorizationAddress" value="some text" />
<property name="subject" value="some text" />
</bean>
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="465" />
<property name="username" value="user" />
<property name="password" value="pass" />
<property name="protocol" value="smtps" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.connectiontimeout">5000</prop>
<prop key="mail.smtp.sendpartial">true</prop>
<prop key="mail.smtp.userset">true</prop>
<prop key="mail.mime.charset">UTF-8</prop>
<prop key="mail.smtp.isSecure">true</prop>
<prop key="mail.smtp.requiresAuthentication">true</prop>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.port">465</prop>
<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
<prop key="mail.smtp.socketFactory.fallback">false</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.debug">true</prop>
</props>
</property>
</bean>
<bean id="velocityEngine"
class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
Aquí está mi código de Mail Manager:
private void sendConfirmationEmail(final User user, final int requestId) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(user.getEmailAddress());
message.setFrom(from);
message.setSubject(subject);
Map<String, Object> model = new HashMap<String, Object>();
model.put("user", user);
model.put("authorizationAddress", authorizationAddress);
model.put("requestId", requestId);
String text = VelocityEngineUtils
.mergeTemplateIntoString(
velocityEngine,
"com/mypackage/mail/registration-confirmation.vm",
model);
message.setText(text, true);
}
};
PendingMail pendingMail = new PendingMail(preparator);
pool.submit(pendingMail);
}
private class PendingMail implements Callable<Object> {
MimeMessagePreparator preparator;
protected PendingMail(MimeMessagePreparator preparator) {
this.preparator = preparator;
}
public Object call() {
mailSender.send(preparator);
return null;
}
}
¿Tienes alguna otra sugerencia?
Saludos, TIHO
Solución
Resolví mi problema gracias a esta publicación .
De acuerdo con la publicación, pongo esto en la configuración de Beans Mailsender:
<property name="defaultEncoding" value="UTF-8"/>
Otros consejos
Puede configurar esto como una propiedad mail.mime.charset
en la configuración de frijoles de primavera de javaMailsenderImpl.Vea un ejemplo respondido en este Consulta anterior .
2020 Respuesta, ya que la configuración XML no está muy utilizada ahora:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.getJavaMailProperties().put("mail.mime.charset", "UTF-8");
Otra opción podría ser:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setDefaultEncoding("UTF-8");