代码之家  ›  专栏  ›  技术社区  ›  Jan Gressmann

用Java创建.eml(电子邮件)文件

  •  18
  • Jan Gressmann  · 技术社区  · 16 年前

    有人知道怎么做吗?我得到了电子邮件的所有信息(正文、主题、发件人、收件人、抄送、密件抄送),需要从中生成一个.eml文件。

    5 回复  |  直到 12 年前
        1
  •  27
  •   salocinx    12 年前

    您可以使用以下代码创建eml文件。它适用于thunderbird,也可能适用于其他电子邮件客户端:

    public static void createMessage(String to, String from, String subject, String body, List<File> attachments) {
        try {
            Message message = new MimeMessage(Session.getInstance(System.getProperties()));
            message.setFrom(new InternetAddress(from));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(subject);
            // create the message part 
            MimeBodyPart content = new MimeBodyPart();
            // fill message
            content.setText(body);
            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(content);
            // add attachments
            for(File file : attachments) {
                MimeBodyPart attachment = new MimeBodyPart();
                DataSource source = new FileDataSource(file);
                attachment.setDataHandler(new DataHandler(source));
                attachment.setFileName(file.getName());
                multipart.addBodyPart(attachment);
            }
            // integration
            message.setContent(multipart);
            // store file
            message.writeTo(new FileOutputStream(new File("c:/mail.eml")));
        } catch (MessagingException ex) {
            Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Mailkit.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
        2
  •  24
  •   Colin Pickard    11 年前

    你可以构造 javax.mail.Message writeTo() 方法将其保存到文件。 看见 JavaMail API

        3
  •  9
  •   Neall    16 年前

    EML文件只是纯文本文件。标题与正文之间用空行隔开。标题如下所示:

    From: "DR CLEMENT OKON" <drclement@nigerianspam.com>
    To: "You" <you@yourdomain.com>
    Subject: REQUEST FOR URGENT BUSINESS RELATIONSHIP 
    Date: Tue, 30 Sep 2008 09:42:47 -0400
    

    有关更多信息,请参阅官方规范 RFC 2822 . 事实上,它并不像一些RFC那么难读。

    编辑:当我说“纯文本”时,我应该想一想。我真正的意思是普通ASCII,而不是8位的“扩展ASCII”,最多127个字符。如果你想要超过7位,你需要某种编码,事情就会变得复杂。

        4
  •  1
  •   Hristo Deshev    16 年前

    查看一个典型的EML文件,它看起来像是发送到服务器的文本通信的原始转储。因此,它是一个包含邮件标题和正文的文本文件。要在EML文件中获得正确格式的附件、不同视图等,您需要对主体及其部分进行MIME编码。

        5
  •  0
  •   Nick SamSmith1986    6 年前

    如果你想添加HTML内容,你必须添加

    content.setHeader("Content-Type", "text/html"); 
    

    message.setContent(multipart);
    

    message.setContent(multipart,"text/html");