1

我编写了一个应用程序,在其中获取消息并检查其内容:

public void getInhoud(Message msg) throws IOException, Exception {
    Object contt = msg.getContent();
    ...
    if (contt instanceof String) {
          handlePart((Part) msg);
    }
    ...
}

public void handlePart(Part part)
        throws MessagingException, IOException, Exception {

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    String contentType = part.getContentType();
    ...
    if ((contentType.length() >= 9)
            && (contentType.toLowerCase().substring(
            0, 9).equals("text/html"))) {
        part.writeTo(out);
        String stringS = out.toString();
    }
    ...
}

我删除了不必要的代码。此方法适用于从 Gmail、Hotmail 和 Outlook 桌面客户端发送的电子邮件,但不知何故无法处理从 Office 365 Web 客户端发送的电子邮件。对于所有其他客户端,内容类型将为“纯/文本”,但仅适用于 Office 365 邮件,它将是text/html. 它将 的数据写入PartaByteArrayOutputStream然后将转换为 a String。这很有效,至少String 将包含该部分的内容。但是它包含的 HTML 有点错误。

这是一个示例: http://pastebin.com/5mEYCHxD(发布到 Pastebin,它非常大)。

请注意=几乎每行末尾都打印的符号。这是我可以在代码中修复的东西,还是应该在邮件客户端的某个地方?

我想过循环遍历 HTML 的每一行,并=在检查它不是 HTML 标记的一部分后删除它。

非常感谢任何帮助,这已经困扰了我几个星期了。

谢谢!

4

1 回答 1

1

这听起来就像引用的可打印编码

带引号的可打印编码数据行不得超过 76 个字符。为了在不改变编码文本的情况下满足这一要求,可以根据需要添加软换行符。软换行符由编码行末尾的“=”组成,在解码文本中不显示为换行符。

writeTo方法似乎还编写了编码内容,看来您必须自己复制流。该getInputStream方法被描述为返回解码后的 InputStream。

于 2012-12-28T10:06:38.707 回答