2009-01-07 62 views
2

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

我创建了一个简单的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); 

Create a .eml (email) file in Java


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

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

的链接都被删除

+0

你可以发布生成的电子邮件文件吗?因为它可能是TNEF编码的,它将是一个二进制文件,但我很高兴你的代码生成的输出。当你调用mbp.attachFile()时,确保该函数正确设置了MIME类型等。如果没有,你将不得不为MIME部分设置它,并且你可能希望它是“附件”,可能不会暗示,即使您调用attachFile(),因为该函数也可以用于附加HTML内联等)。 (我认为这是你想要设置为“附件”的内容处置,而内容类型是文件 – LarryF 2009-01-07 20:43:36

回答

1

你应该尝试将我提到的消息的最顶端标题行,看到Outlook如何处理它呢。添加To:From:Subject:,甚至一个Date:在他们真实的数据,和Outlook更可能把它当作一个消息,而这只是一个文件。

1

Zubi,它看起来像的问题是上附件的内容类型设置为“application /八位字节流”。因此,它看起来像邮件阅读器将PDF文件作为不存在的消息的“文本”正文的替代显示(它只是空白)。你会不得不原谅我,自从我处理Mime以来已经有一年多的时间了,但我认为你会希望A)在信息中加入一些正文文字,B)确保附件上的类型设置为application/pdf。希望这将防止邮件阅读尝试显示PDF作为邮件的主体。

除此之外,它看起来正常...现在,展望MIGHT母狗,因为没有RFC在主体822头。您可能需要添加至少一个From:To:Subject:

消息通过我的MIME解析代码...