Erstellen Sie eine EML (E-Mail) Datei in Java
Frage
Wer weiß, wie dies zu tun? Ich habe alle Informationen der E-Mail (Körper, Subjekt, von, bis, cc, bcc) und benötigen eine EML-Datei aus ihm heraus zu erzeugen.
Lösung
können Sie konstruieren javax.mail.Message
Objekt ( oder haben sie bereits aus dem Mail-Server aufgebaut) und dann können Sie writeTo()
Methode speichern Datei.
Siehe Java Mail API für weitere Informationen.
Andere Tipps
können Sie erstellen eml-Dateien mit dem folgenden Code. Es funktioniert gut mit thunder und wahrscheinlich mit anderem E-Mail-Clients:
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);
}
}
EML-Dateien sind nur einfache Textdateien. Die Kopfstücke sind aus dem Körper durch eine Leerzeile getrennt. Header wie folgt aussehen:
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
Für mehr Informationen, die offizielle Spezifikation ist RFC 2822 . Es ist eigentlich nicht so schwer, wie einige RFCs zu lesen.
Edit: Als ich sagte, „Klartext“ Ich habe eine Sekunde lang dachte sollte. Ich wirklich reine ASCII gemeint - und nicht die 8-Bit „extended ASCII“ entweder -. Nur bis zu Charakter 127. Wenn Sie mehr als sieben Bits wollen, benötigen Sie eine Art von Codierung und die Dinge kompliziert
Mit Blick auf einem typischen EML Datei, die es wie ein rohes Abbild der Textkommunikation sucht, die auf den Server ging. So ist es eine Textdatei, die den Mail-Header und Körper enthält. Um Ihre Anlagen, verschiedene Ansichten, usw. im richtigen Format in der EML-Datei müssen Sie MIME-codieren den Körper und Teile davon.
Wenn Sie HTML-Material hinzufügen möchten, müssen Sie fügen
content.setHeader("Content-Type", "text/html");
(wie Marco Sulla sagte), sondern auch ändern
message.setContent(multipart);
message.setContent(multipart,"text/html");