如何为带有附件的Java MimeMessage对象创建测试数据?

时间:2015-12-02 16:24:48

标签: java email

我想在数据库中保留邮件。为了测试它,我尝试使用和不使用附件生成一些测试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执行某些操作才能将其序列化?

1 个答案:

答案 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
}

我注意到你提供了一个文件的相对路径(以点"。"开头)。仅当文件位于执行应用程序的同一目录(或您的案例中的子目录)时才有效。请尝试使用绝对路径