如何使用MimeMultipart的JavaMail覆盖默认的唯一边界字符串并创建自己的边界?

我有一个我使用的网络应用程序,它需要一个特定的边界字符串(“公司mime边界”)。

当我这样做时,我没有找到覆盖MimeMultipart默认行为的方法

Multipart mp = new MimeMultipart();

一个唯一的边界字符串总是由构造函数创建,我想覆盖此行为以拥有自己的边界字符串,但由于我没有找到任何API,因此无法执行此操作。

即使我在内容类型中设置它,它也不起作用并且创建一个唯一的边界字符串,因为MimeMultipart正在创建一个默认的边界字符串。

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

任何人都可以建议/帮助我。

如何覆盖此默认行为?

来自javax.mail.Multipart :

mail.mime.multipart.ignoreexistingboundaryparameter System属性可以设置为true以使任何边界被忽略,而是在消息中搜索边界线

尝试将此属性设置为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(); } }