Cómo configurar el tipo de contenido para los correos electrónicos enviados con el javailPlailsenderImpl de Spring

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

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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top