我正在尝试使用Java阅读电子邮件。我正确收到了收件箱中的邮件。 但是问题是文本正文逐行显示。我需要邮件中显示的正文,即输出文本应与邮件中显示的顺序相同(改写建议:“表格对齐”)。
这是我用来从Message对象获取正文的代码,
private static String getTextFromMessage(Message message) throws MessagingException, IOException
{
String result = "";
if (message.isMimeType("text/plain"))
{
result = message.getContent().toString();
}
else if (message.isMimeType("multipart/*"))
{
MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
result = getTextFromMimeMultipart(mimeMultipart);
}
return result;
}
private static String getTextFromMimeMultipart(MimeMultipart mimeMultipart) throws MessagingException, IOException
{
String result = "";
int count = mimeMultipart.getCount();
for (int i = 0; i < count; i++)
{
BodyPart bodyPart = mimeMultipart.getBodyPart(i);
if (bodyPart.isMimeType("text/plain"))
{
result = result + "\n" + bodyPart.getContent();
break;
}
else if (bodyPart.isMimeType("text/html"))
{
String html = (String) bodyPart.getContent();
result = result + "\n" + org.jsoup.Jsoup.parse(html).text();
}
else if (bodyPart.getContent() instanceof MimeMultipart)
{
result = result + getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent());
}
}
return result;
}
例如,这是邮件内容:
。
我需要输出为
Beschreibung Stückpreis Anzahl Betrag
22545047 106,56 EUR 1 €106,56 EUR
如邮件中所示。
但是我得到了输出,
Beschreibung
Stückpreis
Anzahl
Betrag
22545047
106,56 EUR
1
€106,56 EUR
任何人都可以帮助我解决此问题。 预先感谢
顺便说一句,奇怪的词是德语的“描述”,“每件价格”,“件数”,“这种总价格”。即它们构成一项法案,与该问题无关。
答案 0 :(得分:1)
您似乎不喜欢在某些“渲染”方法中明确插入的换行符。
为了摆脱它们,请删除所有出现的
+ "\n"
在您的代码中。
然后考虑在输出的末尾添加一个+ "\n"
。
如果要输出的文本是html->纯文本转换的结果,则您将丢失由html渲染创建的表格对齐方式。没有“十个空格”。为了将对齐信息转换为ascii-art(用于对齐列的空间),您必须对html标记进行一些深入的分析,并得出适当数量的要插入的空格。