Spring Mail内联图像未附加

时间:2015-07-03 09:40:28

标签: java spring

我已经编写了一个用于发送内嵌图像邮件的代码。

final MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
                @Override
                public void prepare(MimeMessage mimeMessage) throws Exception {
                    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, MimeMessageHelper.MULTIPART_MODE_RELATED);
                    mimeMessageHelper.setTo(mailTo);

                    mimeMessageHelper.setSubject(subject);
                    mimeMessageHelper.setText(mailContent,true);
                    InternetAddress fromAddress = new InternetAddress(mailFromEmail,mailFromName);
                    mimeMessageHelper.setFrom(fromAddress);
                    for(String inlineImage : inlineImages) {
                        attachImage(mimeMessageHelper, inlineImage);
                    }

                }
            };

这段代码完美无缺。 但后来需要以某种区域语言发送邮件,因此代码失败。 所以我将代码更改为

final MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
                @Override
                public void prepare(MimeMessage mimeMessage) throws Exception {
                    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, MimeMessageHelper.MULTIPART_MODE_RELATED);
                    mimeMessageHelper.setTo(mailTo);

                    /**
                     * for allowing UTF-8 encoding in mail body ie support for regional languages
                     */

                    MimeBodyPart att = new MimeBodyPart();
                    att.setText(mailContent, "UTF-8", "plain");
                    att.addHeader("Content-Type", "text/html; charset=UTF-8");

                    Multipart multipart = new MimeMultipart();
                    multipart.addBodyPart(att);
                    mimeMessage.setContent(multipart);

                    /**
                     * for allowing UTF-8 encoding in mail body ie support for regional languages ends
                     */

                    mimeMessageHelper.setSubject(subject);
//                    mimeMessageHelper.setText(mailContent,true);
                    InternetAddress fromAddress = new InternetAddress(mailFromEmail,mailFromName);
                    mimeMessageHelper.setFrom(fromAddress);
                    for(String inlineImage : inlineImages) {
                        attachImage(mimeMessageHelper, inlineImage);
                    }
                }
            };

attachImage方法是:

private void attachImage(MimeMessageHelper mimeMessageHelper,String imageName) throws MessagingException{
        mimeMessageHelper.addInline(imageName, new ClassPathResource("mailimg/" + imageName));
    }

现在语言显示正常,但内联图像没有附加。如果语言支持不是它的意思或其他任何东西,我不会得到。 任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

还原您对代码所做的更改,您似乎唯一想做的就是进行UTF-8编码。有更简单,更少侵入性的方法。

  1. 配置JavaMailSenderImpl
  2. 将编码传递给MimeMessageHelper
  3. 第一种是侵入性最小的。只需在配置中添加一行(如果您使用的是XML),所有邮件都将使用UTF-8发送。将JavaMailSenderImpl的{​​{3}}属性设置为您要使用的编码。

    <bean id="mailSender" class=org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    

    第二个是更具侵入性,因为你必须改变代码。 MimeMessageHelperdefaultEncoding。您需要更改的(还原的)代码中唯一的一行是构造MimeMessageHelper

    MimeMessageHelper mimeMessageHelper = 
        new MimeMessageHelper(mimeMessage, MimeMessageHelper.MULTIPART_MODE_RELATED, "UTF-8");
    

    无论哪种方式都应该为您提供UTF-8编码的电子邮件,并且要简单得多。