Создайте объект электронной почты в Java и сохраните его в файл - PullRequest
5 голосов
/ 17 ноября 2011

мне нужно сделать резервную копию электронных писем, содержащихся в PST-файле (хранилище Outlook).Я использую libpst, единственную бесплатную библиотеку, которую я нашел в Интернете (http://code.google.com/p/java-libpst/)

, поэтому я могу получить доступ ко всей информации в каждом отдельном письме (тема, тело, отправитель и т. д ..), но мне нужно поместить их в файл

, здесь кто-то сказал, что вы можете создать файл EML из объекта "javax.mail.Message": Создать файл .eml (email) в Java

проблема: как мне создать этот объект сообщения?у меня нет сервера или сеанса электронной почты, просто информация, содержащаяся в электронном письме

ps, создающая MSG-файл, тоже подойдет

Ответы [ 2 ]

10 голосов
/ 30 октября 2012

Вот код для создания действительного файла eml с Java API Api. отлично работает с 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);
    }
}
6 голосов
/ 18 ноября 2011

Вы создаете объект Message так же, как вы создаете объект для отправки, но вместо отправки вы записываете его в файл.Вам не нужен почтовый сервер.Существует множество примеров создания сообщений в демонстрационных программах, включенных в JavaMail для загрузки и в JavaMail FAQ .См. Message.writeTo метод для записи сообщения в файл (сообщение является частью, а writeTo находится на части).

...