我有一个我使用的网络应用程序,它需要一个特定的边界字符串,例如(“公司 mime 边界”)。
当我这样做时,我没有找到覆盖 MimeMultipart 的默认行为的方法
多部分 mp = new MimeMultipart();
唯一的边界字符串总是由构造函数创建,我想覆盖此行为以拥有我自己的边界字符串,但无法这样做,因为我没有找到任何 API。
即使我将它设置为内容类型,它也不起作用并且总是创建一个唯一的边界字符串,因为 MimeMultipart 正在创建一个默认字符串。
mimeMsg.setHeader("Content-Type","multipart/mixed;boundary="company mime boundary");
任何人都可以就此提出建议/帮助我。
如何覆盖此默认行为?
最佳答案
来自 javax.mail.Multipart :
The
mail.mime.multipart.ignoreexistingboundaryparameter
System property may be set to true to cause any boundary to be ignored and instead search for a boundary line in the message
尝试将此属性设置为 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();
}
}
关于java - 如何覆盖默认的唯一边界字符串并使用 JavaMail 的 MimeMultipart 创建我们自己的边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13234024/