簡體   English   中英

Spring Mail嵌入式圖像未附加

[英]Spring Mail inline Images not getting attached

我已經編寫了用於發送帶有嵌入式圖像的郵件的代碼。

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

現在,語言顯示良好,但是內聯圖像未附加。 如果語言支持不是它的原意或其他任何功能,我將無法理解。 任何幫助將不勝感激。

還原對代碼所做的更改,您似乎唯一要做的就是使用UTF-8編碼。 有更簡單,更不麻煩的方法來做到這一點。

  1. 配置JavaMailSenderImpl
  2. 將編碼傳遞給MimeMessageHelper

首先是最少的干擾。 只需在配置中添加一行(如果您使用的是XML),所有郵件將使用UTF-8發送。 JavaMailSenderImpldefaultEncoding屬性設置為要使用的編碼。

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

第二個更具侵入性,因為您必須更改代碼。 MimeMessageHelper具有采用編碼的構造函數 您(更改后的)代碼中唯一需要更改的行是MimeMessageHelper的構造。

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

兩種方式都應該給您提供UTF-8編碼的電子郵件,並且簡單得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM