1

私はいくつかのメールを処理する必要があるプラグインを持っているので、imapメールから添付ファイルを取得していくつかのことを行う必要があります。

すべてが機能しているように見えますが、奇妙な添付ファイルヘッダーを持つ単一のメールがあり、正しく取得できません。ここでは添付ファイルヘッダーです。

    --_01d0aeb2-3f01-4153-9121-66b7af6924f1_
Content-Type: application/msword
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=
    "=?iso-8859-1?Q?Atto_Aziendale_(xxx=E0_del_xxx_xxx_-_xxx)=2C_Pr?=
 =?iso-8859-1?Q?of.xxx_xxx_-_Dr.xxx_xxx.doc?="

「x」はプライバシーを保護するためのものですが、これは重要ではありません。問題は、javaMailを使用してこの添付ファイルのファイル名を取得しようとしたときに発生することです。

Attachment att = new Attachment(mailPart);
String filename = att.getFilename();

私はこれだけを手に入れます: "Atto Aziendale(xxx del xxx xxx --xxx)、Pr"

2行目を読み取っていないようです。

また、別の方法でファイル名を取得しようとしました。

mailPart.getHeader("Content-Disposition").getAttribute("filename").toString();

そしてそれは次のようになります:filename = "=?iso-8859-1?Q?Atto_Aziendale_(xxx = E0_del_xxx_xxx _-_ xxx)= 2C_Pr?==?iso-8859-1?Q?of.xxx_xxx _-_ Dr.xxx_xxx.doc?= 「」

したがって、属性が正しく読み取られているように見えますが、取得しようとすると、次のようになります。

mailPart.getHeader("Content-Disposition").getAttribute("filename").getValue();

それから私は再び切り捨てられたファイル名を取得します: "Atto Aziendale(xxx del xxx xxx --xxx)、Pr"

誰かが完全なファイル名を取得する方法、またはファイル名属性をデコードする方法を知っていますか?

助けてくれてありがとう

4

1 に答える 1

3

IMAPを使用している場合、IMAPサーバーはメールヘッダーを解析し、解析された値をJavaMailクライアントに返します。Content-Dispositionヘッダーには、いくつかの継続行があります。IMAPサーバーは、これらの継続行を適切に組み合わせて、パラメーター値を返す必要があります。サーバーが継続行によって示される空白を省略し、「?=」と「=?」を結合しているようです。それらの間に空白がないと、それらは2つではなく1つのエンコードされた単語のように見えます。これは、それらをデコードするときに間違った結果が得られる理由を説明している可能性があります。

システムプロパティ「mail.mime.decodetext.strict」を「false」に設定してみてください。これにより、JavaMailが値をデコードできるようになる可能性があります。詳細については、javax.mail.internetパッケージのjavadocsを参照してください。

于 2013-01-28T21:06:14.267 に答える