https://drive.google.com/file/d/0ByUcPT6jVZssYmYyYzE4YTctMWU4ZC00NTA4LWI3NjctZTk2ZjBlNzY1MDBl/view?ddrp=1&hl=en_GB&pli=1#
@Override
public void data(InputStream data) throws RejectException, TooMuchDataException, IOException {
Session session = factory.getSession();
if (from == null || from.length() < 1) {
return;
}
if (to.size() < 1) {
return;
}
try {
MimeMessage message = new MimeMessage(session, data);
String mimeType = message.getContentType();
Date dt = new Date();
String folder = String.format("outbox/%s/%s/%s", from, dtDate.format(dt), dtTime.format(dt));
File f = new File(folder);
if (!f.mkdirs()) {
throw new RejectException("Unable to create folder: " + folder);
}
if (message.isMimeType("text/*")) {
FileWriter fw = new FileWriter(folder + "/text.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String) message.getContent());
bw.close();
} else if (message.isMimeType("multipart/*")) {
Multipart mp = (Multipart) message.getContent();
int idx = 0;
int count = mp.getCount();
for (int i = 0; i < count; i++) {
BodyPart part = mp.getBodyPart(i);
String name = part.getDataHandler().getName();
if (part.isMimeType("text/*")) {
if (name == null) {
name = "text-" + (++idx) + ".txt";
}
FileWriter fw = new FileWriter(folder + '/' + name);
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String) part.getContent());
bw.close();
} else {
if (name == null) {
name = "attachment-" + (++idx);
}
FileOutputStream fos = new FileOutputStream(folder + '/' + name);
BufferedOutputStream bos = new BufferedOutputStream(fos);
part.getDataHandler().writeTo(bos);
bos.close();
}
}
} else if (message.isMimeType("message/rfc822")) {
// Not implemented
} else {
Object o = message.getContent();
if (o instanceof String) {
FileWriter fw = new FileWriter(folder + "/text.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String)o);
bw.close();
} else if (o instanceof InputStream) {
FileOutputStream fos = new FileOutputStream(folder + "/message.dat");
BufferedOutputStream bos = new BufferedOutputStream(fos);
message.getDataHandler().writeTo(bos);
bos.close();
} else {
FileWriter fw = new FileWriter(folder + "/unknown.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String)o);
bw.close();
}
}
message.setRecipients(RecipientType.CC, (Address[]) null);
message.setRecipients(RecipientType.BCC, (Address[]) null);
for (String toEmail : to) {
message.setRecipients(RecipientType.TO, (Address[]) null);
message.setRecipient(RecipientType.TO, new InternetAddress(toEmail));
Transport.send(message);
}
} catch (MessagingException ex) {
throw new RejectException("Invalid email received: " + ex.getMessage());
} finally {
}