Kon*_*rad 9 java email multipart
我正在尝试修改现有的MimeMessage正文部分.我想过滤某些链接.有没有人知道为什么即使身体部分内容接缝要更改消息与旧内容一起发送?是否有一些缓存?不知道怎么解决这个问题?
这是我的代码:
public void resend(InputStream data) throws Exception {
Session mailSession = createMailSession();
//mailSession.setDebug(true);
Transport transport = mailSession.getTransport();
MimeMessage message = new MimeMessage(mailSession, data);
Object content = message.getContent();
if (content.getClass().isAssignableFrom(MimeMultipart.class)) {
MimeMultipart mimeMultipart = (MimeMultipart) content;
for (int i = 0; i < mimeMultipart.getCount(); i++) {
BodyPart bodyPart = mimeMultipart.getBodyPart(i);
if (bodyPart.getContentType().startsWith("text/plain")) {
String cnt = updateContent((String) bodyPart.getContent());
System.out.println("ContentType = " + bodyPart.getContentType());
System.out.println("Content = " + cnt);
bodyPart.setContent(cnt, bodyPart.getContentType());
} else if (bodyPart.getContentType().startsWith("text/html")) {
String cnt = updateContent((String) bodyPart.getContent());
System.out.println("ContentType = " + bodyPart.getContentType());
System.out.println("Content = " + cnt);
bodyPart.setContent(cnt, bodyPart.getContentType());
}
}
} else {
String cnt = updateContent((String) message.getContent());
System.out.println("ContentType = " + message.getContentType());
System.out.println("Content = " + cnt);
message.setContent(cnt, message.getContentType());
}
transport.connect();
transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));
transport.close();
}
private String updateContent(String cnt) {
return cnt.replace("www.xyz.pl", "www.new-xyz.pl");
}
Run Code Online (Sandbox Code Playgroud)
输入流"data"包含原始消息.
有任何想法吗?
提前致谢....
你需要在MimeMessage上调用saveChanges()(据我所知应该就足够了),参见:api-doc MimeMessage#saveChanges():
更新此消息的相应标头字段以与消息的内容一致.如果此消息包含在文件夹中,则对此消息所做的任何更改都将提交到包含文件夹.
如果更改了消息标题或内容的任何部分,则必须调用saveChanges以确保这些更改是永久性的.否则,根据文件夹实现,可以保存或不保存任何此类修改.