0

我使用 JavaMail 创建了一个应用程序,它读取电子邮件并获取其内容。内容将以 HTML 格式获取。此内容将被分析,然后转发到另一个电子邮件地址。

我已经在 Chrome、Mozilla、Outlook、Office 365、Thunderbird 和 Internet Explorer 中测试了电子邮件的布局。一切都很好,当然,除了 IE。

我制作了一些屏幕截图,一个在 Chrome 中,另一个在 Internet Explorer 中,都来自同一个邮件客户端 (Office 365)。

Chrome 中的好电子邮件

Chrome 电子邮件

错误的 IE 电子邮件

错误的 IE 电子邮件

我整理了multipart一封电子邮件,一部分用于内容,另一部分用于附件。这是我正在使用的代码:

public void SentTest(String messageContent) throws IOException, ParseException, NoSuchProviderException {

            //Only get text between HTML tags
        Pattern pattern = Pattern.compile(".*?<html.*?>(.*?)</html>.*?");
        Matcher matcher = pattern.matcher(messageContent);
        if (matcher.matches()) {
            messageContent= matcher.group(1);
        }

        messageContent= Jsoup.clean(messageContent, Whitelist.relaxed());

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smpt.host", "pod51010.outlook.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.starttls.enable", "true");

        Session session = Session.getInstance(props, null);
        try {
            transport = session.getTransport("smtp");
            try {
                transport.connect("host", "email", "password");
            } catch (MessagingException ex) {
                ex.printStackTrace();
            }
        } catch (NoSuchProviderException ex) {
            ex.printStackTrace();
        }

        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("email"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("testemail"));
            message.setSubject("Test");
            MimeBodyPart testMessagePart = new MimeBodyPart();
            testMessagePart.setText(inhoudBericht, "ISO-8859-1", "html");

            testMessagePart.setHeader("Content-Type", "text/html; charset=\"iso-8859-1\"");
            testMessagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
            testMessagePart.setHeader("MIME-Version", "1.0");


            Multipart multipart = new MimeMultipart("multipart");
            multipart.addBodyPart(testMessagePart);

            //Set the content of the Message
            message.setHeader("", "");
            message.setContent(multipart, "html; charset=\"iso-8859-1\"");

            try {
                transport.sendMessage(message, message.getAllRecipients());
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            transport.close();

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }


    } 

我的问题是:如何使电子邮件的布局灵活,使其适用于所有浏览器?

编辑

在 HTML 添加<html>标签和 aDoctype并删除width属性后,布局会“正确”显示,但当然还有另一个问题:

蓝色布局

如您所见,它现在是蓝色的,并且正在显示表格轮廓。有什么办法摆脱这个吗?

编辑

bgcolor通过删除标签摆脱了蓝色背景。现在唯一的问题是删除表格轮廓。

4

1 回答 1

0

通过使用 Jsoup 和 NodeTraverser 解决了这个问题(归功于这个答案)

Document doc = Jsoup.parse(input);


NodeTraversor traversor  = new NodeTraversor(new NodeVisitor() {

  @Override
  public void tail(Node node, int depth) {
    if (node instanceof Element) {
        Element e = (Element) node;
        e.removeAttr("width");
        e.removeAttr("border");
        e.removeAttr("bgcolor");
    }
  }

  @Override
  public void head(Node node, int depth) {        
  }
});

traversor.traverse(doc.body());
String modifiedHtml = doc.toString();

并添加一个文档类型

modifiedHTML = "<!DOCTYPE html PUBLIC \" //W3C//DTD HTML 4.0.1//en\">"+modifiedHTML;

这可能不是最好的解决方案,但它有效,我对此感到满意:)。谢谢您的帮助!

于 2013-01-10T11:12:24.847 回答