我正在编写电子邮件应用程序的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]}
答案 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)
答案 2 :(得分:0)
要读取返回消息中的数据,请使用带有InputStream的MimeMessage构造函数,然后使用JavaMail API以正常方式访问消息的各个部分。 JavaMail将为您解码消息的编码部分。