2

我将使用 JavaMail 创建一个带有附件的 EML 文件。

我成功创建了一个简单的 EML 文件,但添加附件无法正常工作。我要添加一个 PDF 文件。我的 EML 文件将成功创建。如果我用 Outlook 打开生成的 EML 文件,我会发现我的 PDF 文件不是附件,但我会发现 EML 文件本身是附件。有人有想法吗?

我尝试了两种变体(结果相同),我使用了FileDataSource类和简单的方法MimeBodyPart#attachFile(File)

我将发布一个示例:

File pdfFile = new File("somePdfFile");

Properties p = System.getProperties();
Session session = Session.getInstance(p);
MimeMessage message = new MimeMessage(session);
// MimeBodyPart txt = new MimeBodyPart();
// txt.setText("");
MimeBodyPart mbp = new MimeBodyPart();
mbp.attachFile(attachment);
// FileDataSource fds = new FileDataSource(attachment);
// fds.setFileTypeMap(new FileTypeMap() {
//    
//   @Override
//   public String getContentType(String arg0) {
//     return "application/pdf";
//   }
//    
//    @Override
//    public String getContentType(File file) {
//      return "application/pdf";
//    }
//      
//  });
//  mbp.setDataHandler(new DataHandler(fds));
//  mbp.setFileName("\"" + attachment.getName() + "\"");
//  mbp.setDisposition(MimePart.ATTACHMENT);
//  mbp.setHeader("Content-ID", "Attachment");
Multipart mp = new MimeMultipart();
//  mp.addBodyPart(txt);
mp.addBodyPart(mbp);
message.setContent(mp);
File emlFile = new File("message.eml");
emlFile.createNewFile();
message.writeTo(new FileOutputStream(emlFile));

// do something with the EML file
// Desktop.getDesktop().open(emlFile);

在 Java 中创建一个 .eml(电子邮件)文件


谢谢您的答复。我上传了一个 PDF 文件(我用于测试,它是一个使用 Crystal Reports 生成的简单 HelloWorld)和生成的 EML 文件,其中应该包含 PDF 文件。

我只是注意到,如果我使用 Apple Mail 或 Outlook Express 打开链接的 EML 文件,它可以工作(但没有编辑的可能性)。也许这是 Microsoft Outlook 的问题?

链接已删除

4

2 回答 2

1

Zubi,看起来问题是附件上的内容类型设置为“application/octet-stream”。因此,看起来邮件阅读器正在将 PDF 文件作为不存在的邮件“文本”正文的替代显示(它只是空白)。

你必须原谅我,自从我与 Mime 打交道已经一年多了,但我想你会想要 A) 在消息中添加一些正文,B) 确保附件上的类型设置为应用程序/pdf。希望这将防止邮件阅读尝试将 PDF 显示为邮件的主要正文。

除此之外,它看起来很正常......现在,Outlook 可能是个婊子,因为主体中没有 RFC 822 标头。您可能希望至少添加一个From:、、To:和一个Subject:

消息通过了 MY MIME 解析代码...

于 2009-01-07T21:58:05.660 回答
1

您应该尝试将我提到的标题行添加到邮件的最顶部,然后查看 Outlook 如何处理它。添加一个To:, From:Subject:甚至可能是其中Date:包含真实数据的 a,Outlook 更有可能将其视为消息,而不仅仅是文件。

于 2009-01-08T18:07:39.057 回答