邮件不呈现 html 并且格式损坏

Posted

技术标签:

【中文标题】邮件不呈现 html 并且格式损坏【英文标题】:mail not rendering html and coming in broken format 【发布时间】:2016-08-03 01:47:15 【问题描述】:

我完全不明白这个问题。如果我在作为 java 应用程序运行时尝试使用 main 方法,那么邮件将以正确的主题和内容格式完美发送。 而当我从 localhost 尝试时,它的格式会损坏,例如

--------=_Part_0_1765202668.1460463643056 内容类型:文本/html; charset=utf-8 内容传输编码:7bit

我的内容

--------=_Part_0_1765202668.1460463643056--

我已经添加了所有相关的 jars(javax.mail)。无论内容是什么,它都只会如此。这是同一段代码,它在主要方法中运行良好,但不适用于本地主机。 有什么想法吗?

一些相关代码

MimeMessage msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(this.from));
    if ((this.replyTo != null) && (!this.replyTo.equals("")))
        msg.setReplyTo(InternetAddress.parse(this.replyTo));
    msg.setSentDate(new Date());
    InternetAddress[] address = InternetAddress.parse(this.to);
    msg.setRecipients(Message.RecipientType.TO, address);

    if (this.cc != null) 
        InternetAddress[] address1 = InternetAddress.parse(this.cc);
        msg.setRecipients(Message.RecipientType.CC, address1);
    

    if (this.bcc != null) 
        InternetAddress[] address2 = InternetAddress.parse(this.bcc);
        msg.setRecipients(Message.RecipientType.BCC, address2);
    
    msg.setSubject(this.subject);

    Multipart mp = new MimeMultipart();

    MimeBodyPart mbp = new MimeBodyPart();
    mbp.setContent(this.body,"text/html;charset=utf-8");

    mp.addBodyPart(mbp);

    if (this.attachfiles != null) 
        for (Enumeration e = this.attachfiles.keys(); e.hasMoreElements();) 
            String filename = (String) e.nextElement();
            mbp = new MimeBodyPart();

            FileDataSource fds = new FileDataSource(
                    (String) this.attachfiles.get(filename));
            mbp.setDataHandler(new DataHandler(fds));
            mbp.setFileName(filename);

            mp.addBodyPart(mbp);
        

    

    msg.setContent(mp);

    msg.setSentDate(new Date());

    Transport.send(msg);

【问题讨论】:

我不明白“从 main 尝试”和“从 localhost 尝试”之间的区别。你能更好地解释一下你在做什么吗? “localhost”是指您在某种应用程序服务器中运行吗?您确定服务器使用的是相同版本的 JavaMail 吗? JavaMail debug output 显示什么? 【参考方案1】:

pom.xml 有问题 原来包中存在冲突。 Tomcat 自动在 Maven 构建中包含自己的 JavaMail 包,该包来自 web 项目中的其他两个 jar,这导致了问题,而不是从标准 JavaMail jar 导入。

只需排除以下罐子

    <dependency>
    <groupId>org.apache.ws.commons.axiom</groupId>
    <artifactId>axiom-api</artifactId>
    <version>1.2.7</version>
    <exclusions>
        <exclusion>
            <artifactId>geronimo-javamail_1.4_spec</artifactId>
            <groupId>org.apache.geronimo.specs</groupId>
        </exclusion>
        <exclusion>
            <artifactId>geronimo-activation_1.1_spec</artifactId>
            <groupId>org.apache.geronimo.specs</groupId>
        </exclusion>
    </exclusions>
    </dependency>

【讨论】:

以上是关于邮件不呈现 html 并且格式损坏的主要内容,如果未能解决你的问题,请参考以下文章

Python smtplib 损坏 html 电子邮件

Laravel 8:将异常呈现为电子邮件的 html

Mime 和 Office365

如何为不受支持的客户端将 HTML 电子邮件中的 GIF 替换为不同的图像

Microsoft Outlook 条件格式问题

测试 HTML 电子邮件呈现 [关闭]