【问题标题】:How to save an Email as Text如何将电子邮件另存为文本
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 非常感谢!我没想到只是在两者之间进行转换会出现问题,但它确实解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 2019-04-24
  • 2011-07-08
  • 1970-01-01
相关资源
最近更新 更多