package fmc.prototypes.javamail; import java.security.NoSuchProviderException; import java.util.ArrayList; import java.util.List; import javax.mail.*; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; /** * Prototype class for displaying the e-mails in defined server under the a user. * * @author kreuz */ public class JavaMail { String userName; String userPass; String protocol; String serverName; /** * Command line options */ private static final Option USER_NAME_OPTION = new Option("u", "username", true, "the username which is used to connect the mail server"); private static final Option USER_PASS_OPTION = new Option("p", "password", true, "the username's password which is used to connect the mail server"); private static final Option PROTOCOL_OPTION = new Option("c", "protocol", true, "protocol to user (imap or pop3)"); private static final Option MAIL_SERVER_OPTION = new Option("s", "servername", true, "mail server to connect to (e.g. imap.fincom.cz, pop3.seznam.cz)"); /** * Creates a new instance of JavaMail * * @param cmd command line params */ public JavaMail(CommandLine cmd) { if (cmd.hasOption(USER_NAME_OPTION.getOpt())) { this.userName = userName; } if (cmd.hasOption(USER_PASS_OPTION.getOpt())) { this.userPass = userPass; } if (cmd.hasOption(USER_PASS_OPTION.getOpt())) { this.protocol = protocol; } if (cmd.hasOption(USER_PASS_OPTION.getOpt())) { this.serverName = serverName; } } /** * Main runnable method * * @param args command line args */ public static void main(String[] args) { CommandLine cmd = Tools.parseArgs(new Option[] { USER_NAME_OPTION, USER_PASS_OPTION }, args); JavaMail javaMailPrototype = new JavaMail(cmd); javaMailPrototype.printAllFoldersWithMails(); } /** * Prints all e-mail folder and their e-mails to the System.out. If exception occurs, prints it. */ public void printAllFoldersWithMails() { try { Folder inboxFolder = getInboxFolder(); System.out.println("---------- INBOX FOLDER ------------"); for (Message m : inboxFolder.getMessages()) { System.out.println("email subject : " + m.getSubject()); } List allFolders = getAllFolders(inboxFolder); for (Folder f : allFolders) { System.out.println(f.getName() + "---------------------------
"); f.open(Folder.READ_ONLY); List allMessages = getAllMessagesInFolder(f); for (Message m : allMessages) { if ((m.getFrom() != null) && (m.getFrom().length > 0)) { System.out.println(" FROM: " + m.getFrom()[0]); } if (m.getSubject() != null) { System.out.println(" SUBJECT: " + m.getSubject() + "
"); } } f.close(false); } inboxFolder.close(false); } catch (Exception ex) { System.out.println("EXCEPTION OCCURED !!! Message : " + ex.getMessage()); } } /** * Gets the main folder - with name INBOX * * @return inbox mail folder * * @throws NoSuchProviderException if getting store fails * @throws MessagingException if mail messages can not be got */ public Folder getInboxFolder() throws NoSuchProviderException, MessagingException { java.util.Properties props = System.getProperties(); props.put("mail." + protocol + ".host", serverName); javax.mail.Authenticator authenticator = new MyAuthenticator(userName, userPass); javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props, authenticator); javax.mail.Store store = mailSession.getStore(protocol); store.connect(); javax.mail.Folder folder = store.getFolder("INBOX"); folder.open(Folder.READ_ONLY); return folder; } /** * Gets all child folders for the folder * * @param parentFolder folder for which the child folders should be got * * @return all child folders * * @throws MessagingException some error durign work with e-mails fails */ public List getAllFolders(Folder parentFolder) throws MessagingException { List allFolders = new ArrayList(); for (Folder f : parentFolder.list()) { allFolders.add(f); } return allFolders; } /** * Gets all messages in a folder * * @param folder folder to list messages in * * @return all messages in folder * * @throws MessagingException some error durign work with e-mails fails */ public List getAllMessagesInFolder(Folder folder) throws MessagingException { List allMessages = new ArrayList(); for (Message message : folder.getMessages()) { allMessages.add(message); } return allMessages; } }