代码之家  ›  专栏  ›  技术社区  ›  Thomas

使用javamail[关闭]创建带有附件的EML文件

  •  2
  • Thomas  · 技术社区  · 17 年前

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

    Create a .eml (email) file in Java


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

    我刚刚注意到,如果我用Apple Mail或Outlook Express打开链接的EML文件,它会正常工作(但没有编辑的可能性)。也许这是微软的一个问题?

    链接被删除

    2 回复  |  直到 13 年前
        1
  •  1
  •   bluish dmajkic    13 年前

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

        2
  •  1
  •   bluish dmajkic    13 年前

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

    你得原谅我,我已经一年多没有处理过哑剧了,但我想你会想要a)在邮件中添加一些正文,b)确保附件上的类型设置为application/pdf。希望,这将阻止邮件阅读尝试将PDF作为邮件的主要主体显示。

    除此之外,看起来很正常…现在,Outlook可能会抱怨,因为主体中没有RFC822头文件。您可能需要至少添加一个 From: , To: 和A Subject: .

    消息传递了我的mime解析代码…