最佳实践 – 发送javamail mime多部分电子邮件 – 和gmail

我有一个需要发送确认电子邮件等的Tomcat应用程序。我已经使用Javamail(mail.jar)编写了电子邮件编辑器,以发送多部分文本/ HTML电子邮件。 我将代码基于Java EE示例。 我在本地服务器上使用SMTP MTA。

它很棒。 在Outlook中,我看到了HTML版本。 如果我将其拖到Outlook垃圾邮件文件夹中,我会看到文本版本。 所以我解释说它有效。

但是,如果我在Gmail中查看电子邮件,我只会看到文字版本。 我知道HTML就在那里(这就是Outlook从中得到的)。 但Gmail没有显示它……我有很多来自其他系统的电子邮件,在Gmail中显示为HTML。

任何人都能指出我显示我失踪的规格吗? 我需要创建特殊标题吗?

谢谢

代码如下所示:

Message message = new MimeMessage(session); Multipart multiPart = new MimeMultipart("alternative"); try { MimeBodyPart textPart = new MimeBodyPart(); textPart.setText(text, "utf-8"); MimeBodyPart htmlPart = new MimeBodyPart(); htmlPart.setContent(html, "text/html; charset=utf-8"); multiPart.addBodyPart(htmlPart); multiPart.addBodyPart(textPart); message.setContent(multiPart); if(from != null){ message.setFrom(new InternetAddress(from)); }else message.setFrom(); if(replyto != null) message.setReplyTo(new InternetAddress[]{new InternetAddress(replyto)}); else message.setReplyTo(new InternetAddress[]{new InternetAddress(from)}); InternetAddress[] toAddresses = { new InternetAddress(to) }; message.setRecipients(Message.RecipientType.TO, toAddresses); message.setSubject(subject); message.setSentDate(new Date()); Transport.send(message); } catch (AddressException e) { e.printStackTrace(); System.out.println("Error: "+e.getMessage()); } catch (MessagingException e) { e.printStackTrace(); System.out.println("Error: "+e.getMessage()); } finally { System.out.println("Email sent!"); } 

解决了! 似乎根据多部分MIME规范,部件的顺序很重要。 它们应按从低保真度到高保真度的顺序添加。 因此,似乎GMail遵循规范并使用最后一部分。 在我的情况下,我有他们HTML,文本。 我刚刚将订单换成了Text,HTML和Gmail正确呈现了它…

 MimeBodyPart textPart = new MimeBodyPart(); textPart.setText(text, "utf-8"); MimeBodyPart htmlPart = new MimeBodyPart(); htmlPart.setContent(html, "text/html; charset=utf-8"); multiPart.addBodyPart(textPart); // <-- first multiPart.addBodyPart(htmlPart); // <-- second message.setContent(multiPart); 

谢谢您的帮助!