Comment définir le type de contenu pour les e-mails envoyés à l'aide du printemps JavaMailSenderImpl

StackOverflow https://stackoverflow.com/questions/3275133

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

Était-ce utile?

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");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top