Comment définir le type de contenu pour les e-mails envoyés à l'aide du printemps JavaMailSenderImpl
Question
la question est de sujet.Je suis en utilisant JavaMailSenderImpl de printemps 3.0.3.La LIBÉRATION et de la vitesse 1.6.4 pour la préparation du courrier à partir d'un modèle.
Lorsque j'envoie un email avec le croate personnages de mes webapp destinataire reçoit un "?" dans le stand de la normale croate caractères.Si j'ai activer le mode de débogage pour les e-mails, de journal, je peux voir que Content-type est fixé à:
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Comment puis-je le mettre à:
Content-Type: text/html; charset=utf-8?
J'utilise gmail pour l'envoi de mail alors que je suis le développement de cette webapp.
Voici mes paramètres dans le ressort de la servlet, xml fichier conf:
<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>
Voici mon code à partir de gestionnaire de courrier:
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;
}
}
Avez-vous une autre suggestion?
En ce qui concerne, Tiho
La solution
J'ai résolu mon problème grâce à Cet article .
Selon le post, je l'ai mis dans la configuration de haricot de messagerie:
<property name="defaultEncoding" value="UTF-8"/>
Autres conseils
Vous pouvez définir cette propriété mail.mime.charset
dans le JavaMailSenderImpl printemps bean config.Voir un exemple de réponse à cette requête précédente.
2020 Réponse, comme la configuration XML n'est pas très utilisée maintenant:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.getJavaMailProperties().put("mail.mime.charset", "UTF-8");
Une autre option pourrait être:
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setDefaultEncoding("UTF-8");