Crear un archivo.eml(correo electrónico) en Java
email outlook (4)
¿Alguien sabe cómo hacer esto? Obtuve toda la información del correo electrónico (cuerpo, asunto, de, a, cc, bcc) y necesito generar un archivo .eml.
Al mirar un archivo EML típico, parece un volcado sin procesar de la comunicación de texto que fue al servidor. Por lo tanto, es un archivo de texto que contiene los encabezados y el cuerpo del correo. Para obtener sus archivos adjuntos, diferentes vistas, etc. en el formato correcto dentro del archivo EML, necesita codificar MIME el cuerpo y sus partes.
Los archivos EML son solo archivos de texto sin formato. Los encabezados están separados del cuerpo por una línea en blanco. Los encabezados se ven así:
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
Para obtener más información, la especificación oficial es RFC 2822 . De hecho, no es tan difícil de leer como algunos RFC.
Editar: Cuando dije "texto sin formato", debería haber pensado por un segundo. Realmente quería decir ASCII simple, y no el "ASCII extendido" de 8 bits, solo hasta el carácter 127. Si quieres más de siete bits, necesitas algún tipo de codificación y las cosas se complican.
Puede crear archivos eml con el siguiente código. Funciona bien con thunderbird y probablemente con otros clientes de correo electrónico:
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);
}
}
Puede construir el objeto javax.mail.Message
(o ya lo ha construido desde el servidor de correo) y luego puede usar el método writeTo()
para guardarlo en el archivo. Vea la API de JavaMail para más información.