用Java创建一个.eml(email)文件

问题描述:

任何人都知道如何做到这一点?我收到了电子邮件的所有信息(body,subject,from,to,cc,bcc),并且需要生成一个.eml文件。用Java创建一个.eml(email)文件

您可以构造javax.mail.Message对象(或从邮件服务器上构建它),然后您可以使用writeTo()方法将其保存到文件。 查看JavaMail API了解更多信息。

+0

...包javax.mail不存在 – Supuhstar 2010-10-16 11:12:47

+1

@Supuhstar - 古老的线程,但对于其他人读这篇文章,这依赖于了JavaMail API。 – berry120 2011-07-26 15:25:22

EML文件只是纯文本文件。标题通过空白行与主体分开。头像是这样的:

From: "DR CLEMENT OKON" <[email protected]> 
To: "You" <[email protected]> 
Subject: REQUEST FOR URGENT BUSINESS RELATIONSHIP 
Date: Tue, 30 Sep 2008 09:42:47 -0400 

欲了解更多信息,官方规格是RFC 2822。它实际上并不像一些RFC那样难以阅读。

编辑:当我说“纯文本”时,我应该想一下。我的意思是简单的ASCII - 而不是8位的“扩展ASCII” - 只要达到127就可以了。如果你想要超过7位,你需要某种编码,事情会变得复杂。

查看一个典型的EML文件,它看起来像去往服务器的文本通信的原始转储。所以它是一个包含邮件标题和正文的文本文件。要以EML文件中的正确格式获取附件,不同视图等,您需要对身体及其零件进行MIME编码。

您可以使用以下代码创建eml文件。它工作正常,雷鸟,可能与其他电子邮件客户端:

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); 
    } 
}