3

gmailなどの外部ドメインにメールを送信する電子メールアプリケーションのjunitを作成しています。SmtpMessage、SmtpServerなどのクラスを含むダムスター(偽のメールサーバー)APIを使用しています。ユニコード本体

   String unicodeBody = "TestBody\u0393"

しかし、偽のメールサーバーから受信すると、「TestBody=CE=93」のようになります。メールを受信するsmtpサーバーのコードは

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

ここで何が欠けているのかわかりませんか?

参考までに、メールを MimeMessage (コンテンツ タイプが multipart/alternative) として送信します。これには、内部に 2 つの mimeBodyParts (テキスト本文用と 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 に答える