我通过这种方式发送电子邮件:
@Test
public void testEmailCharacterSet() throws MessagingException, UnsupportedEncodingException {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setDefaultEncoding("utf-8");
mailSender.setHost("*****");
mailSender.setUsername("*****");
mailSender.setPassword("*****");
Properties properties = new Properties();
properties.setProperty("mail.mime.charset", "utf-8");
mailSender.setJavaMailProperties(properties);
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, false, "utf-8");
mimeMessage.setContent("Árvíztűrő tükörfúrógép 3", "text/html");
helper.setFrom("[email protected]");
helper.setTo("[email protected]");
mailSender.send(mimeMessage);
}
如您所见,我将在所有地方都设置utf-8。我的问题是传出的原始字节仍在Latin1中,至少这是我在Wireshark中看到的内容:
Date: Sun, 17 May 2015 18:16:21 +0200 (CEST)
From: [email protected]
To: [email protected]
Message-ID: <13648335.0.1431879381653.JavaMail.foo@foo-dell>
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
=C1rv=EDzt?r? t=FCk=F6rf=FAr=F3g=E9p 3
.
所以标题基本上说的是UTF-8,但是传出的字节已经在问号和where处出现问号,这是Latin1中缺少的两个字符。 JVM的file.encoding
不是UTF-8,但我正在寻找一种保持原样并仅在电子邮件方面解决此问题的方法。
谢谢!
更新
我以前已经成功地使用了普通的旧方法发送电子邮件,有趣的是它仍然有效:
Message mimeMessage = new MimeMessage(session);
mimeMessage.setContent("Árvíztűrő tükörfúrógép 7 oldschool", "text/html; charset=utf-8");
因此,这显然仅是JavaMailSenderImpl
特有的内容。
如果添加此行:
properties.setProperty("mail.smtp.allow8bitmime", "true");
properties.setProperty("mail.smtps.allow8bitmime", "true");
在您的代码中,邮件的Content-Transfer-Encoding:标头设置为8bit,邮件可以阅读。
这对我有用-link
mailSender.send(new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage) throws MessagingException {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setFrom("[email protected]");
message.setTo("[email protected]");
message.setSubject("my subject");
message.setText("my text <img src='cid:myLogo'>", true);
message.addInline("myLogo", new ClassPathResource("img/mylogo.gif"));
message.addAttachment("myDocument.pdf", new ClassPathResource("doc/myDocument.pdf"));
}
});