代码之家  ›  专栏  ›  技术社区  ›  Tiho

如何为使用spring的JavaMailSenderImpl发送的电子邮件设置内容类型

  •  11
  • Tiho  · 技术社区  · 16 年前

    当我从我的网络应用程序发送带有克罗地亚字符的电子邮件时,收件人会收到“?”代表正常的克罗地亚字符。如果我打开邮件的调试模式, 内容类型 设置为:

    Content-Type: text/html; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    

    如何将其设置为:

    Content-Type: text/html; charset=utf-8?
    

    以下是我在spring的servlet xml 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>
    

    以下是我在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;
                }
    }
    

    蒂霍

    2 回复  |  直到 16 年前
        1
  •  16
  •   starwarswii Georgi Peev    8 年前

    多亏了你,我才解决了问题 this post .

    根据帖子,我把它放在mailSender bean配置中:

    <property name="defaultEncoding" value="UTF-8"/>
    
        2
  •  2
  •   Community Mohan Dere    9 年前

    mail.mime.charset previous query .

        3
  •  1
  •   Benjamin Caure    6 年前

    2020答案,因为XML配置现在不太常用:

    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.getJavaMailProperties().put("mail.mime.charset", "UTF-8");
    
        4
  •  0
  •   Jeremy Caney Abloin    6 年前

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