8

我需要备份 PST 文件(Outlook 存储)中包含的电子邮件。我正在使用 libpst,这是我在网上找到的唯一免费库(http://code.google.com/p/java-libpst/

所以我可以访问每封电子邮件中的所有信息(主题、正文、发件人 ecc ..),但我需要将它们放在一个文件中

这里有人说你可以从“javax.mail.Message”对象创建一个 EML 文件: Create a .eml (email) file in Java

问题是:我如何创建这个 Message 对象?我没有服务器或电子邮件会话,只有电子邮件中包含的信息

ps 创建一个 .msg 文件也可以

4

3 回答 3

13

这是使用 java mail api 创建有效 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);
    }
}
于 2012-10-30T10:04:19.877 回答
7

创建 Message 对象的方式与创建发送消息对象的方式相同,但不是发送消息对象,而是将其写入文件。您不需要电子邮件服务器。在JavaMail 下载附带的演示程序和JavaMail FAQ中有很多创建消息的示例。请参阅 Message.writeTo 方法将消息写入文件(Message 是 Part,而 writeTo 在 Part 上)。

于 2011-11-17T22:30:44.387 回答
0

您可以使用 mimeMessageHelper 创建消息,如下所示:

    import org.springframework.mail.javamail.MimeMessageHelper;
    
    public methodTocreateMessageObject(){
    MimeMessage message = mailSender.createMimeMessage();
    
    MimeMessageHelper mh= new MimeMessageHelper(message, true);
    mh.setSubject(subject);
    mh.setTo(toArray(to));
    if (CollectionUtils.isNotEmpty(cc)) {
    mh.setCc(toArray(cc));
    }
    mh.setFrom(from);
    
    mh.setText(body, true);
    
            if (attachmentFilenames != null) {
                for (String filename : attachmentFilenames) {
                    FileSystemResource file = new FileSystemResource(filename);
                    mh.addAttachment(file.getFilename(), file);
                }
            }
    
            if (inlineAttachments != null && contentType!=null) {
                for (Entry<String, byte[]> inlineAttach : inlineAttachments.entrySet()) {
    
                    String cId = inlineAttach.getKey();
                    byte[] attachInByteStream = inlineAttach.getValue();
                    InputStreamSource attachSource = new ByteArrayResource(attachInByteStream);
                    mh.addInline(cId, attachSource, contentType);
    
                }
            }
ByteArrayOutputStream output = new ByteArrayOutputStream();
        message.writeTo(output);

        Date lastUpdatetime = new Date();

        try(OutputStream outputStream = new FileOutputStream("D:/mail2.eml")) {
            output.writeTo(outputStream);
        }
    }
于 2022-02-16T22:18:48.993 回答