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

标签 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 做一些事情才能像这样序列化它?

最佳答案

尝试使用 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/

相关文章:

java - 将生成的文件公开到另一个模块中的 Realm

java - Flyway 仅在我的 jar 文件中找不到迁移

java - 带有事件的警报对话框错误

ruby-on-rails - 如何使用 Mandrill 发送和接收邮件?

php - 如何将动态值发送到laravel中的邮件函数

java - Android 通过 HttpPost 和 URLconnection 使用 cookie

java - 如何在 Java 上的 JTable 中填充 Excel 的某些行?

mysql - 使用 str_replace 将 {name} 替换为人名

ios - 从我在 iOS 上的应用程序通过 mail.app 发送电子邮件

HTML 表格在 Outlook 电子邮件中出现扭曲