使用JavaMail创建带附件的EML文件
我将使用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的问题?
链接已删除
您应该尝试将我提到的标题行添加到邮件的最顶部,然后查看Outlook如何处理它。 添加To:
, From:
, Subject:
甚至可能是Date:
其中包含真实数据,而Outlook更可能将其视为消息,而不仅仅是文件。
Zubi,看起来问题是附件上的内容类型设置为“application / octet-stream”。 因此,看起来邮件阅读器将PDF文件作为不存在的消息“文本”主体的替代显示(它只是空白)。
你必须原谅我,自从我处理Mime已经一年多了,但我想你会想要A)在邮件中加入一些正文,B)确保附件上的类型设置为application / pdf。 希望这会阻止邮件阅读尝试将PDF显示为邮件的主要部分。
除此之外,它看起来很正常……现在,Outlook MIGHT婊子,因为主体中没有RFC 822标头。 您可能希望至少添加一个From:
, To:
和一个Subject:
.
该消息传递了我的MIME解析代码…