最佳实践 - 发送JavaMail的MIME多部分邮件 - 和Gmail(Best Practice

2019-07-19 12:27发布

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

它的伟大工程。 在Outlook中,我看到了HTML的版本。 如果我将它拖动到Outlook垃圾邮件文件夹,我看到的文字版本。 所以,我认为理解的话说:它的工作原理。

但是,如果我在Gmail中查看的邮件,我看到的只是文字版本。 我知道HTML是有(这就是从展望了它)。 但Gmail没有显示它......我有很多从显示为HTML Gmail中的其他系统的电子邮件。

任何人都可以点我的规格,显示我缺少的是什么? 是否有特殊的头,我需要创造?

谢谢

代码如下所示:

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

Answer 1:

解决了! 这似乎根据多MIME规范,各部分的顺序是非常重要的。 他们应该按顺序由低高保真高保真添加。 这么看来的GMail遵循规范,使用的最后一部分。 在我来说,我有他们的HTML,文本。 我刚换的以文本,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);

谢谢您的帮助!



文章来源: Best Practices - Sending javamail mime multipart emails - and gmail