作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将邮件保存在数据库中。为了测试它,我尝试生成一些带或不带附件的测试 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 做一些事情才能像这样序列化它?
最佳答案
尝试使用 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
}
我注意到您提供了文件的相对路径(以点“.”开头)。仅当文件位于应用程序执行所在的同一目录(或您的情况下的子目录)中时,这才有效。尝试使用绝对路径来代替。
关于java - 如何为带有附件的 Java MimeMessage 对象创建测试数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34047789/
我是一名优秀的程序员,十分优秀!