我想将邮件保留在数据库中。为了测试它,我尝试生成一些带有和不带有附件的测试MimeMessage对象。我添加附件如下:
MimeMessage message = new MimeMessage(Session.getDefaultInstance(props, null));
Multipart multipart = new MimeMultiPart();
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.attachFile("./files/test.txt");
bodyPart.setFileName("test.txt");
multipart.addBodyPart(bodyPart);
message.setContent(multipart);
message.saveChanges();
现在,我想使用其
writeTo(OutputStream)
方法序列化此MimeMessage。该调用导致FileNotFoundException:java.io.FileNotFoundException: ./files/test.txt: open failed: ENOENT (No such file or directory)
看来
writeTo()
-Method正在搜索附件。是否不应该通过测试数据生成器中的attachFile()
调用将文件包含在MimeMessage-Object中?我是否需要对MimeMessage-Object进行某些操作才能将其序列化? 最佳答案
尝试使用File
对象,您可以在其中检查该文件是否存在。
private static BodyPart createAttachment(filepath) {
File file = new File(filepath);
if (file.exists()) {
DataSource source = new FileDataSource(file);
DataHandler handler = new DataHandler(source);
BodyPart attachment = new MimeBodyPart();
attachment.setDataHandler(handler);
attachment.setFileName(file.getName());
return attachment;
}
return null; // or throw exception
}
我注意到您正在提供文件的相对路径(以点“。”开头)。仅当文件位于应用程序执行所在的同一目录(或您的情况下的子目录)中时,此方法才有效。尝试改用绝对路径。