Pregunta

¿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 a partir de él.

¿Fue útil?

Solución

Puedes construir javax.mail. Mensaje (o ya lo tiene construido desde el servidor de correo) y luego puede usar writeTo () para guardarlo en un archivo. Consulte API de JavaMail para obtener más información.

Otros consejos

Puedes 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);
    }
}

Los archivos EML son solo archivos de texto plano. Los encabezados están separados del cuerpo por una línea en blanco. Los encabezados se ven así:

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

Para obtener más información, la especificación oficial es RFC 2822 . En realidad, no es tan difícil de leer como algunos RFC.

Editar: cuando dije " texto sin formato " Debería haber pensado por un segundo. Realmente quise decir ASCII simple, y no el ASCII ampliado de 8 bits " " O bien, 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.

Al mirar un archivo EML típico, parece un volcado sin formato de la comunicación de texto que se envió al servidor. Así que es un archivo de texto que contiene los encabezados y el cuerpo del correo. Para obtener sus adjuntos, diferentes vistas, etc. en el formato correcto dentro del archivo EML, necesita codificar MIME el cuerpo y sus partes.

Si deseas agregar HTML, debes agregarlo

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

(como dijo Marco Sulla) pero también cambia

message.setContent(multipart);

a

message.setContent(multipart,"text/html");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top