我已经编写了一个用于发送内嵌图像邮件的代码。
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));
}
现在语言显示正常,但内联图像没有附加。如果语言支持不是它的意思或其他任何东西,我不会得到。 任何帮助将受到高度赞赏。
答案 0 :(得分:2)
还原您对代码所做的更改,您似乎唯一想做的就是进行UTF-8
编码。有更简单,更少侵入性的方法。
JavaMailSenderImpl
。MimeMessageHelper
第一种是侵入性最小的。只需在配置中添加一行(如果您使用的是XML),所有邮件都将使用UTF-8发送。将JavaMailSenderImpl
的{{3}}属性设置为您要使用的编码。
<bean id="mailSender" class=org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="defaultEncoding" value="UTF-8" />
</bean>
第二个是更具侵入性,因为你必须改变代码。 MimeMessageHelper
有defaultEncoding
。您需要更改的(还原的)代码中唯一的一行是构造MimeMessageHelper
。
MimeMessageHelper mimeMessageHelper =
new MimeMessageHelper(mimeMessage, MimeMessageHelper.MULTIPART_MODE_RELATED, "UTF-8");
无论哪种方式都应该为您提供UTF-8编码的电子邮件,并且要简单得多。