3

我正在为电子邮件应用程序编写 junit,该应用程序将邮件发送到 gmail 等任何外部域。我正在使用哑元(假邮件服务器)api 来处理包括 SmtpMessage、SmtpServer 等类的应用程序。我正在编写我发送的 junit统一码体

   String unicodeBody = "TestBody\u0393"

但是当我从假邮件服务器收到它时,我得到它像这样“TestBody = CE = 93”。接收邮件的 smtp 服务器的代码是

  SmtpMessage email=smtpServer.getReceivedEmail().next();

我不确定我在这里缺少什么?

只是为了提供信息,我将邮件作为 MimeMessage(其内容类型是多部分/替代)发送,其中内部包含两个 mimeBodyPart,即一个用于文本正文,另一个用于 html 正文。

编辑:- 完整的电子邮件正文是:-

MIME-Version: 1.0
Message-ID: <18805827.1.1355311147338.JavaMail.SMiles@INN-L-0019>
Subject: subject
Date: Wed, 12 Dec 2012 16:49:07 +0530 (IST)
To: to@email.com
Content-Type: multipart/alternative;
Reply-To: from@email.com
From: from@email.com

------=_Part_0_13986615.1355311147225Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: quoted-printable
body=CE=93------=_Part_0_13986615.1355311147225Content-Type: text/html; charset=UTF-8Content-Transfer-Encoding: quoted-printable
body=CE=93------=_Part_0_13986615.1355311147225--

------=_Part_0_13986615.1355311147225Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: quoted-printable
body=CE=93------=_Part_0_13986615.1355311147225Content-Type: text/html; charset=UTF-8Content-Transfer-Encoding: quoted-printable
body=CE=93------=_Part_0_13986615.1355311147225--
{MIME-Version=[1.0], Message-ID=[<18805827.1.1355311147338.JavaMail.Smiles@INN-L-0019>], Subject=[subject], Date=[Wed, 12 Dec 2012 16:49:07 +0530 (IST)], To=[to@email.com], Content-Type=[multipart/alternative;], Reply-To=[from@email.com], From=[from@email.com]}
4

3 回答 3

1

这称为Quoted Printable编码,您可以使用Apache Commons Codec对其进行解码,例如:

public static void main(String[] args) {
    QuotedPrintableCodec a = new QuotedPrintableCodec("UTF-8");
    try {
        System.out.println(a.decode("TestBody=CE=93"));
        // prints "TestBodyΓ"
    } catch (DecoderException e) {
        e.printStackTrace();
    }
}

它将首先变成=CE=93实际的字节值0xCE 0x93,然后将它们解码为 UTF-8(在构造函数中传递)

于 2012-12-12T10:43:06.363 回答
1

今天我也遇到了这个问题。要回答这个问题,您不能将邮件正文与笨蛋一起使用。垃圾箱坏了。简单的答案是使用greenmail

于 2014-07-11T22:40:55.863 回答
0

要读取返回消息中的数据,请使用接受 InputStream 的 MimeMessage 构造函数,然后使用 JavaMail API 以正常方式访问消息的各个部分。JavaMail 将为您解码消息的编码部分。

于 2012-12-12T18:52:32.020 回答