【发布时间】:2015-12-02 17:08:14
【问题描述】:
作为备份,我想存储使用 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 位的东西,但我无法控制传入的电子邮件。
【问题讨论】:
-
您的电子邮件已编码。您可以尝试使用
javax.mail.internet.MimeUtility.decode之类的工具对其进行解码 -
我更希望不要解码任何东西,只需在收到时保存即可。在大多数情况下,MimeUtility 工作正常,但有时不是。因此,通过解码,我增加了我非常想避免的复杂性。
标签: java email encoding character-encoding