2008-10-01 17 views

risposta

18

È possibile costruire l'oggetto javax.mail.Message (o averlo già costruito dal server di posta) e quindi è possibile utilizzare il metodo writeTo() per salvarlo in un file. Vedere JavaMail API per ulteriori informazioni.

+0

... pacchetto javax.mail non esiste – Supuhstar

+1

@Supuhstar - vecchio thread, ma per chiunque altro la lettura di questo, questo si basa sulle API JavaMail. – berry120

9

I file EML sono solo file di testo. Le intestazioni sono separate dal corpo da una riga vuota. Intestazioni simile a questa:

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 

Per ulteriori informazioni, le specifiche ufficiali è RFC 2822. In realtà non è così difficile da leggere come alcune RFC.

Modifica: Quando ho detto "testo normale" avrei dovuto pensarci per un secondo. Intendevo davvero semplicemente ASCII - e non "ASCII esteso" a 8 bit - solo fino al carattere 127. Se vuoi più di sette bit, hai bisogno di un qualche tipo di codifica e le cose si complicano.

1

Guardando un tipico file EML sembra un dump raw della comunicazione testuale che è andata al server. Quindi è un file di testo contenente le intestazioni e il corpo della posta. Per ottenere gli allegati, le diverse viste, ecc. Nel formato corretto all'interno del file EML, è necessario codificare MIME-body e le sue parti.

19

È possibile creare file eml con il seguente codice. Funziona bene con Thunderbird e probabilmente con altri client di posta:

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

Per salvare un messaggio html, aggiungere 'content.setHeader (" Content-Type "," text/html ");' –