如何将电子邮件另存为文本

时间:2015-09-07 07:54:06

标签: java email encoding character-encoding

作为备份,我想存储使用Java获取的原始收到的电子邮件。

我目前的方法是使用writeTo方法:

MimeMessage mimeMessage;
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
     mimeMessage.writeTo(out);
     String rawContent = out.toString();
     FileUtiles.writeStringToFile("email.txt", rawContent);
}

但是当我通过Telnet发送此电子邮件时:

Return-Path: <jones@jibjab.jinga>
To: <indianer@jones.com>
Subject: test special chars
Content-Type: multipart/mixed; boundary="=_1c4a520f54326063ea347cd3da780d5a"

--=_1c4a520f54326063ea347cd3da780d5a
Content-Type: text/plain; charset="IBM850"
Content-Transfer-Encoding: 7bit

Test
ä ü Ö ß
Test

--=_1c4a520f54326063ea347cd3da780d5a
Content-Type: application/zip
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="archive.zip"

--=_1c4a520f54326063ea347cd3da780d5a--

“äüÖß”部分在文本文件中被破坏(替换为“ ”。在Outlook中,一切看起来都很好。

我对电子邮件协议的理解是,只发送ascii字符。 为什么它不起作用,我能做些什么来让它起作用?

编辑: 如果出现任何问题,电子邮件应该以其原始状态作为备份。由于电子邮件协议仅使用ASCII字符,因此保存整个电子邮件应该没有问题。 引用可打印的编码(就像在supposed dublicate中我更喜欢这个7位的东西,但我无法控制进来的电子邮件。

1 个答案:

答案 0 :(得分:1)

你不应该将消息转换为字符串 - 而是让mimeMessage.writeTo(fileOutputStream) - 直接写入FileOutputStream。 (转换为字符串会让您面临字符集问题的风险)