Create a .eml (email) file in Java

前端 未结 5 806
不思量自难忘°
不思量自难忘° 2020-12-01 07:50

Anybody knows how to do this? I got all the information of the email (body, subject, from , to, cc, bcc) and need to generate an .eml file out of it.

相关标签:
5条回答
  • 2020-12-01 08:30

    If you want to add HTML Stuff you have to add

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

    (as Marco Sulla said) but also change

    message.setContent(multipart);
    

    to

    message.setContent(multipart,"text/html");
    
    0 讨论(0)
  • 2020-12-01 08:33

    You can create eml files with the following code. It works fine with thunderbird and probably with other email clients:

    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);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 08:35

    EML files are just plain text files. The headers are separated from the body by a blank line. Headers look like this:

    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
    

    For more info, the official spec is RFC 2822. It's actually not as hard to read as some RFCs.

    Edit: When I said "plain text" I should have thought for a second. I really meant plain ASCII - and not the 8-bit "extended ASCII" either - just up to character 127. If you want more than seven bits, you need some kind of encoding and things get complicated.

    0 讨论(0)
  • 2020-12-01 08:40

    You can construct javax.mail.Message object (or have it already constructed from the mail server) and then you can use writeTo() method to save it to file. See JavaMail API for more information.

    0 讨论(0)
  • 2020-12-01 08:48

    Looking at a typical EML file it looks like a raw dump of the text communication that went to the server. So it is a text file containing the mail headers and body. To get your attachments, different views, etc in the correct format inside the EML file you need to MIME-encode the body and its parts.

    0 讨论(0)
提交回复
热议问题