/**
*
* EmailDownloader
*
* @version 1.1.0 vom 22.03.2015
* @author Daniel Ruf
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.UUID;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Flags;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
public class emaildownloader {
private String saveDirectory;
public static void main(String[] args) {
String version = "1.1.0";
String program = "EmailDownloader";
System.out.println(program + " " + version );
String host = "";
String port = "";
String username = "";
String password = "";
String saveDirectory = "";
Boolean replace_existing_files = false;
Properties prop = new Properties();
try {
prop.load(new FileInputStream("config.properties"));
host = prop.getProperty("host");
port = prop.getProperty("port");
username = prop.getProperty("username");
password = prop.getProperty("password");
saveDirectory = prop.getProperty("directory");
replace_existing_files = Boolean.parseBoolean(prop.getProperty("replace_existing_files"));
} catch (IOException ex) {
ex.printStackTrace();
}
File createDirs = new File(saveDirectory);
createDirs.mkdirs();
emaildownloader receiver = new emaildownloader();
receiver.setSaveDirectory(saveDirectory);
receiver.downloadEmailAttachments(host, port, username, password, replace_existing_files);
System.out.println("");
System.out.println("Done.");
}
public void setSaveDirectory(String dir) {
this.saveDirectory = dir;
}
public void downloadEmailAttachments(String host, String port,
String username, String password, Boolean replace_existing_files) {
Properties properties = new Properties();
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", port);
//properties.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.fallback", "false");
properties.setProperty("mail.imap.starttls.enable", "true");
properties.setProperty("mail.imap.socketFactory.port",
String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
try {
Store store = session.getStore("imap");
store.connect(username, password);
Folder folderInbox = store.getFolder("INBOX");
folderInbox.open(Folder.READ_WRITE);
Message[] arrayMessages = folderInbox.getMessages();
for (int i = 0; i < arrayMessages.length; i++) {
Message message = arrayMessages[i];
if (!message.isSet(Flags.Flag.SEEN)) {
//Address[] fromAddress = message.getFrom();
//String from = fromAddress[0].toString();
//String subject = message.getSubject();
//String sentDate = message.getSentDate().toString();
String contentType = message.getContentType();
String messageContent = "";
String attachFiles = "";
if (contentType.contains("multipart")) {
Multipart multiPart = (Multipart)message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
String fileName = part.getFileName();
if (!replace_existing_files) {
UUID random = UUID.randomUUID();
fileName = fileName.replaceFirst("[.]", "_"+random+".");
} // end of if
attachFiles += fileName + ", ";
part.saveFile(saveDirectory + File.separator + fileName);
} else {
messageContent = part.getContent().toString();
}
}
if (attachFiles.length() > 1) {
attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
}
} else if (contentType.contains("text/plain")|| contentType.contains("text/html")) {
Object content = message.getContent();
if (content != null) {
messageContent = content.toString();
}
}
System.out.println("Message #" + (i + 1) + ":");
//System.out.println("\t From: " + from);
//System.out.println("\t Subject: " + subject);
//System.out.println("\t Sent Date: " + sentDate);
//System.out.println("\t Message: " + messageContent);
//System.out.println("\t Attachments: " + attachFiles);
message.setFlag(Flags.Flag.SEEN,true);
}
}
folderInbox.close(false);
store.close();
} catch (NoSuchProviderException ex) {
System.out.println("No provider for imap.");
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("Could not connect to the message store");
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}