Qualcuno sa come fare? Ho ricevuto tutte le informazioni dell'email (corpo, oggetto, da, a, cc, bcc) e ho bisogno di generare un file .eml al di fuori di esso.Creare un file .eml (email) in Java
risposta
È 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.
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.
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.
È 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);
}
}
Per salvare un messaggio html, aggiungere 'content.setHeader (" Content-Type "," text/html ");' –
... pacchetto javax.mail non esiste – Supuhstar
@Supuhstar - vecchio thread, ma per chiunque altro la lettura di questo, questo si basa sulle API JavaMail. – berry120