Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaMail创建带有附件的EML文件_Java_Email_Outlook_Jakarta Mail_Eml - Fatal编程技术网

使用JavaMail创建带有附件的EML文件

使用JavaMail创建带有附件的EML文件,java,email,outlook,jakarta-mail,eml,Java,Email,Outlook,Jakarta Mail,Eml,我将使用JavaMail创建一个带有附件的EML文件 我成功创建了一个简单的EML文件,但添加附件无法正常工作。我要添加一个PDF文件。我的EML文件将成功创建。如果我用Outlook打开生成的EML文件,我会发现不是我的PDF文件作为附件,而是EML文件本身作为附件。有人有主意吗 我尝试了两种变体(结果相同),我使用了FileDataSource类和MimeBodyPart#attachFile(File)的简单方法 我将发布一个示例: File pdfFile = new File("som

我将使用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);


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

我只是注意到,如果我用Apple Mail或Outlook Express打开链接的EML文件,它会工作(但不允许编辑)。也许这是微软Outlook的问题


链接被删除了

Zubi,问题似乎是附件上的内容类型设置为“应用程序/八位字节流”。因此,邮件阅读器似乎将PDF文件作为不存在的邮件“文本”正文的替代显示(只是空白)

你必须原谅我,我已经一年多没有处理Mime了,但我想你会想a)在邮件中添加一些正文,B)确保附件上的类型设置为application/pdf。希望这样可以防止邮件阅读试图将PDF显示为邮件的主要内容

除此之外,这看起来很正常。。。现在,Outlook可能会发牢骚,因为主体中没有RFC 822头。您可能希望至少添加一个
发件人:
收件人:
,以及一个
主题:


邮件传递了我的MIME解析代码…

您应该尝试将我提到的标题行添加到邮件的最顶端,然后查看Outlook如何处理它。将
添加到:
发件人:
主题:
,甚至可能添加一个包含真实数据的
日期:
,Outlook更可能将其视为一封邮件,而不仅仅是一个文件。

您能发布生成的电子邮件文件吗?因为它可能是TNEF编码的,所以它将是一个二进制文件,但我很清楚您的代码生成了什么输出。调用mbp.attachFile()时,请确保函数正确设置了mime类型,等等。如果没有设置,则必须为该mime部分设置它,并且您可能希望它是“attachment”(即使调用了attachFile(),这也可能不是隐含的,因为该函数还可以用于内联附加HTML等)。(我认为您希望将内容配置设置为“附件”,并将内容类型设置为文件