Question

Quelqu'un sait comment faire cela? J'ai reçu toutes les informations de l'e-mail (corps, objet, de, à, cc, bcc) et ai besoin de générer un fichier .eml à partir de celui-ci.

Était-ce utile?

La solution

Vous pouvez construire javax.mail. Message (ou construit à partir du serveur de messagerie), puis utilisez writeTo () pour l’enregistrer dans un fichier. Reportez-vous à la API JavaMail pour plus d'informations.

Autres conseils

Vous pouvez créer des fichiers eml avec le code suivant. Cela fonctionne bien avec thunderbird et probablement avec d’autres clients de messagerie:

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

Les fichiers EML ne sont que des fichiers texte. Les en-têtes sont séparés du corps par une ligne vierge. Les en-têtes ressemblent à ceci:

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

Pour plus d'informations, les spécifications officielles sont RFC 2822 . Ce n'est pas aussi difficile à lire que certaines RFC.

Modifier: quand j'ai dit "texte brut" J'aurais dû penser une seconde. Je voulais vraiment dire ASCII simple - et non le "ASCII étendu" de 8 bits soit jusqu'au caractère 127. Si vous voulez plus de sept bits, vous avez besoin d'un encodage et les choses se compliquent.

En regardant un fichier EML typique, cela ressemble à un vidage brut de la communication de texte envoyée au serveur. Il s’agit donc d’un fichier texte contenant les en-têtes et le corps du courrier. Pour obtenir vos pièces jointes, différentes vues, etc. au format correct dans le fichier EML, vous devez encoder MIME le corps et ses parties.

Si vous souhaitez ajouter du contenu HTML, vous devez ajouter

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

(comme l'a dit Marco Sulla), mais aussi changer

message.setContent(multipart);

à

message.setContent(multipart,"text/html");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top