0

私はこのドキュメントを読みました:

http://docs.oracle.com/javaee/6/api/javax/mail/internet/package-summary.html

そこで、mimeMessage にいくつかのプロパティを追加します。

Properties props = new Properties();
        props.put("mail.mime.decodefilename", true);

    Session mailConnection = Session.getInstance(props, null);

    source = new FileInputStream(emlFile);

    MimeMessage message = new MimeMessage(mailConnection, source);

今、メソッドbodyPart.getFileName()が正しいファイル名を返すことを期待しています。しかし、この構成ではまだ機能し、mimeUtils: を呼び出す必要がありますMimeUtility.decodeText。私も試します:

        props.put("mail.mime.decodefilename", "true");

しかし、成功しませんでした。それで、私は何を間違っていますか?

アップデート:

デバッグ後、私はこの解決策を持っていました:

これは動作します

    Properties props = System.getProperties();        
    props.put("mail.mime.decodefilename", "true");

これは機能しません:

    Properties props = new Properites();
    props.put("mail.mime.decodefilename", "true");

そのため、ファイル名がデコードされているかどうかは、システム プロパティにも依存します。誰がどのプロパティを知っていますか?すべてのシステム プロパティを試して、それがどれであるかを解決する必要はありません。

4

1 に答える 1

1

MimeMessage.getFileName

mail.mime.encodefilename Systemプロパティがtrueに設定されている場合、MimeUtility.decodeTextメソッドを使用してファイル名をデコードします。


さて、実装を見ると、これが:MimeUtility.decodeTextの呼び出し中にどのように現れるかです。getFileName

if (decodeFileName && filename != null) {
    try {
    filename = MimeUtility.decodeText(filename);
    } catch (UnsupportedEncodingException ex) {
    throw new MessagingException("Can't decode filename", ex);
    }
}

ここdecodeFileNameで、次のように初期化されます。

s = System.getProperty("mail.mime.decodefilename");
// default to false
decodeFileName = s != null && !s.equalsIgnoreCase("false");

javadoc実装と競合しているようです。

したがって、おそらくを使用して、mail.mime.decodefilenameの代わりに設定してみてください。mail.mime.encodefilenameSystem.setProperty

于 2013-03-18T15:29:27.380 に答える