4

私が使用する Web アプリには、(「会社の MIME 境界」) のような特定の境界文字列が必要です。

MimeMultipart のデフォルトの動作をオーバーライドする方法が見つかりませんでした。

Multipart mp = new MimeMultipart();

一意の境界文字列は常にコンストラクターによって作成されます。この動作をオーバーライドして独自の境界文字列を作成したいのですが、API が見つからなかったため、これを行うことができません。

content-type に設定しても機能せず、MimeMultipart がデフォルトの境界文字列を作成しているため、常に一意の境界文字列が作成されます。

mimeMsg.setHeader("Content-Type","multipart/mixed;boundary="company mime boundary");

誰でもこれについて提案/助けてください。

このデフォルトの動作をオーバーライドする方法は?

4

1 に答える 1

3

javax.mail.Multipartから:

System プロパティを true に設定すると、mail.mime.multipart.ignoreexistingboundaryparameter境界が無視され、代わりにメッセージ内の境界線が検索されます。

このプロパティを に設定してからtrue、次を使用して独自のプロパティを追加してみてください

mimeMsg.setHeader("Content-Type","");

私はそれを実装していませんが、うまくいくと確信しています

アップデート

MimeMultipart クラスをサブクラス化し、getBoundaryMethod(). 以下のサンプルコードを参照してください。

import javax.activation.DataSource;
import javax.mail.MessagingException;
import javax.mail.internet.ContentType;
import javax.mail.internet.MimeMultipart;
public class MyMimeMultyPart extends MimeMultipart {
    /**
     * DataSource that provides our InputStream.
     */
    protected DataSource ds;

    /**
     * Indicates if the data has been parsed.
     */
    protected boolean parsed = true;

    private ContentType type;

    public MyMimeMultyPart(DataSource dataSource) throws MessagingException {
        super(dataSource);
    }

    public MyMimeMultyPart(String subtype) {
        type = new ContentType("multipart", subtype, null);
        type.setParameter("boundary", getBoundary());
        contentType = type.toString();
    }

    public MyMimeMultyPart() {
        super();
    }

    private static int part;

    private synchronized static String getBoundary() {
        int i;
        synchronized (MimeMultipart.class) {
            i = part++;
        }
        StringBuffer buf = new StringBuffer(64);
        buf.append("----=_Part_").append(i).append('_').append((new Object()).hashCode()).append('.').append(System.currentTimeMillis());
        return buf.toString();
    }
}
于 2012-11-05T14:45:04.537 に答える