dumbster单元测试邮件服务器没有返回预期的邮件正文?

时间:2012-12-12 10:13:54

标签: utf-8 character-encoding javamail

我正在编写电子邮件应用程序的junit,它将邮件发送到任何外部域,例如gmail等。我正在使用dumbster(假邮件服务器)api for 其中包括像SmtpMessage,SmtpServer等类。我正在编写junit,我发送unicode主体

   String unicodeBody = "TestBody\u0393"

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

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

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

仅供参考我将邮件作为MimeMessage(其内容类型为multipart / alternative)发送到内部 包含两个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]}

3 个答案:

答案 0 :(得分: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(在构造函数中传递)

答案 1 :(得分:1)

今天我也遇到过这个问题。要回答这个问题,您不能将邮件正文与dumbster一起使用。 Dumbster是broken。简单的答案是使用greenmail

答案 2 :(得分:0)

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