我想在数据库中保留邮件。为了测试它,我尝试使用和不使用附件生成一些测试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()
- 方法正在搜索附加文件。不应该通过我的测试数据生成器中的attachFile()
调用将文件包含在MimeMessage-Object中吗?我是否必须对MimeMessage-Object执行某些操作才能将其序列化?
答案 0 :(得分:1)
尝试使用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
}
我注意到你提供了一个文件的相对路径(以点"。"开头)。仅当文件位于执行应用程序的同一目录(或您的案例中的子目录)时才有效。请尝试使用绝对路径。