【问题标题】:Why Multipart/mixed java mail content is sent as attachment in outlook?为什么 Multipart/mixed java 邮件内容在 Outlook 中作为附件发送?
【发布时间】:2018-09-24 11:49:13
【问题描述】:

我正在发送包含 text/plain 和 text/html 的多部分电子邮件,但是当我在 Outlook 中收到邮件时,html 内容作为附件出现,而 text/plain 出现在正文中。我想要两个都在体内。

pom.xml 配置是这样的

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.2</version>
    </dependency>

而java代码是

public static void main(String[] args) throws Exception {

    Properties props = new Properties();
    props.put("mail.smtp.host", sSMTPServer);
    props.put("mail.smtp.port", 25);
    Session session = null;

    session = Session.getInstance(props, null);
    MimeMessage msg = new MimeMessage(session);


    Multipart mainMultipart = new MimeMultipart("mixed");
    Multipart htmlAndTextMultipart = new MimeMultipart("alternative");


    MimeBodyPart BodyPart = new MimeBodyPart();
    BodyPart.setText(Header);
    htmlAndTextMultipart.addBodyPart(BodyPart);


    MimeBodyPart BodyPart1 = new MimeBodyPart();
    BodyPart1.setContent(Body, "text/html; charset=utf-8");
    htmlAndTextMultipart.addBodyPart(BodyPart1);

    for (int i = 0; i < htmlAndTextMultipart.getCount(); i++) {
        mainMultipart.addBodyPart(htmlAndTextMultipart.getBodyPart(i));
    }
    msg.setContent(mainMultipart);

    InternetAddress[] from = InternetAddress.parse("appdev@abc.com");
    InternetAddress[] toList = InternetAddress.parse(to);
    msg.addFrom(from);
    msg.addRecipients(Message.RecipientType.TO, toList);
    msg.setSubject("Multipart_Testing");

    Transport transport = session.getTransport("smtp");
    transport.connect(sSMTPServer, 25, null,
            null);
    transport.sendMessage(msg, toList);
    System.out.println("Sent");
    transport.close();
}

问题仅在于 HTML 内容没有出现在正文中的 Outlook

mail snippet of gmail

在 Outlook 中,所有内容都不会像 gmail 那样呈现,而是作为附件呈现
mail snippet of outlook

【问题讨论】:

    标签: java jakarta-mail


    【解决方案1】:

    您无法控制邮件程序如何显示您的邮件,不同的邮件程序会以不同的方式显示相同的邮件。最好的办法是将所有内容放在一个 html 部分中,并坚持使用非常基本的 html。

    哦,JavaMail 1.4.2 已经非常老了,如果可能的话,你应该upgrade to the current version

    【讨论】:

    • @Bill 谢谢你是对的,我可以将所有内容放在一个单独的部分中,我们无法控制邮件客户端如何显示。
    猜你喜欢
    • 2017-01-01
    • 2011-03-23
    • 2015-05-10
    • 1970-01-01
    • 2015-09-09
    • 2012-03-03
    • 2017-01-17
    • 2017-01-17
    • 2019-01-16
    相关资源
    最近更新 更多