使用javamail api发送的html电子邮件正文在outlook中显示为乱码
我使用下面的代码向不同域的多个用户发送邮件使用javamail api发送的html电子邮件正文在outlook中显示为乱码,java,email,outlook,smtp,office365,Java,Email,Outlook,Smtp,Office365,我使用下面的代码向不同域的多个用户发送邮件 String emailBody = "<html>Some html text goes here</html>" String from = "from@domain1.com" String bcc = "bcc@domain2.com" String subject = "Some subject..." List attachments = "Some image att
String emailBody = "<html>Some html text goes here</html>"
String from = "from@domain1.com"
String bcc = "bcc@domain2.com"
String subject = "Some subject..."
List attachments = "Some image attachments ..."
MimeMessage message = new MimeMessage(session);
message.setHeader("Content-Type", "text/html; charset=UTF-16")
message.setHeader("Accept-Language", "en-US")
message.setHeader("Content-Language", "en-US")
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bcc));
message.setSubject(subject);
// creates message part
MimeBodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent(emailBody, "text/html; charset=UTF-16");
// creates multi-part
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
addAttachmentsToMultiPart(multipart,attachments)
message.setContent(multipart);
Transport.send(message);
我不确定如何在邮件头上设置“内容传输编码”,以及邮件正文在哪里编码。但我在最终用户邮件属性中没有看到类似的标题。我曾尝试将“内容传输编码”显式设置为“base64”、“quoted printable”(和其他类型),但它总是被忽略,gmail总是将其作为base64接收。此设置对最终用户邮件没有影响。他们总是收到同样的垃圾
有谁能帮助我了解可能出现的问题以及如何解决它我们的代码与您编写的代码非常相似,您可以尝试的唯一区别是:
- 我们不在邮件中设置任何标题
- 我们使用稍微不同的body内容类型-
text/html;字符集=utf-8
另外,我们使用
com.google.common.net.MediaType
将媒体类型传递到电子邮件发送类,这样您就可以使用MediaType.toString()
来获取内容类型。我们的代码与您编写的代码非常相似,您可以尝试的唯一区别是:
- 我们不在邮件中设置任何标题
- 我们使用稍微不同的body内容类型-
text/html;字符集=utf-8
另外,我们使用
com.google.common.net.MediaType
将媒体类型传递到电子邮件发送类,这样您就可以使用MediaType.toString()
来获取内容类型。经过大量研究和实验后,我解决了这个问题。基本上有两个问题
经过大量的研究和实验,我终于解决了这个问题。基本上有两个问题
Content-Type: text/html; charset="UTF-16"
Content-Transfer-Encoding: base64