@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); List<StoredMessage> messages = inbox.getNonDeletedMessages(); long size = sumMessageSizes(messages); conn.println("+OK " + messages.size() + " " + size); } catch (Exception me) { conn.println("-ERR " + me); } }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { String[] args = cmd.split(" "); if (args.length < 2) { conn.println("-ERR Required syntax: USER <username>"); return; } String username = args[1]; state.setUser(state.getUser(username)); conn.println("+OK"); } catch (UserException nsue) { conn.println("-ERR " + nsue); } } }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { GreenMailUser user = state.getUser(); if (user == null) { conn.println("-ERR USER required"); return; } String[] args = cmd.split(" "); if (args.length < 2) { conn.println("-ERR Required syntax: PASS <username>"); return; } try { String pass = args[1]; state.authenticate(pass); conn.println("+OK"); } catch (Exception e) { conn.println("-ERR Authentication failed: " + e); } } }
@Override public void run() { try { conn = new Pop3Connection(this, socket); state = new Pop3State(manager); quitting = false; sendGreetings(); while (!quitting) { handleCommand(); } conn.close(); } catch (SocketTimeoutException ste) { conn.println("421 Service shutting down and closing transmission channel"); } catch (Exception e) { } finally { try { socket.close(); } catch (IOException ioe) { } } }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); if (cmdLine.length < 3) throw new IllegalArgumentException("range and line count required"); String msgNumStr = cmdLine[1]; List<StoredMessage> msgList = inbox.getMessages(new MsgRangeFilter(msgNumStr, false)); if (msgList.size() != 1) { conn.println("-ERR no such message"); return; } StoredMessage msg = msgList.get(0); int numLines = Integer.parseInt(cmdLine[2]); try (BufferedReader in = new BufferedReader( new StringReader(GreenMailUtil.getWholeMessage(msg.getMimeMessage())))) { conn.println("+OK"); copyHeaders(in, conn); copyLines(in, conn, numLines); } conn.println("."); } catch (Exception e) { conn.println("-ERR " + e); } }
@Override public boolean isValidForState(Pop3State state) { return !state.isAuthenticated(); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); String msgNumStr = cmdLine[1]; List<StoredMessage> msgList = inbox.getMessages(new MsgRangeFilter(msgNumStr, false)); if (msgList.size() != 1) { conn.println("-ERR no such message"); return; } StoredMessage msg = msgList.get(0); if (msg.isSet(Flags.Flag.DELETED)) { conn.println("-ERR message already deleted"); return; } msg.setFlag(Flags.Flag.DELETED, true); conn.println("+OK message scheduled for deletion"); } catch (Exception e) { conn.println("-ERR " + e); } } }
@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder folder = state.getFolder(); if (folder != null) { folder.expunge(); } conn.println("+OK bye see you soon"); conn.quit(); } catch (FolderException me) { conn.println("+OK Signing off, but message deletion failed"); conn.quit(); } } }
@Override public boolean isValidForState(Pop3State state) { return !state.isAuthenticated(); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); String msgNumStr = cmdLine[1]; List<StoredMessage> msgList = inbox.getMessages(new MsgRangeFilter(msgNumStr, false)); if (msgList.size() != 1) { conn.println("-ERR no such message"); return; } StoredMessage msg = msgList.get(0); String email = GreenMailUtil.getWholeMessage(msg.getMimeMessage()); conn.println("+OK"); conn.print(new StringReader(email)); conn.println(); conn.println("."); msg.setFlag(Flags.Flag.SEEN, true); } catch (Exception e) { conn.println("-ERR " + e); } } }
@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }
@Override public void execute(Pop3Connection conn, Pop3State state, String cmd) { conn.println("+OK"); try { MailFolder inbox = state.getFolder(); List<StoredMessage> msgList = inbox.getMessages(); int count = 0; for (StoredMessage msg : msgList) { if (msg.isSet(Flags.Flag.DELETED)) { count++; msg.setFlag(Flags.Flag.DELETED, false); } } conn.println("+OK maildrop has "+count+" messages undeleted."); } catch (Exception e) { conn.println("-ERR " + e); } } }
@Override public boolean isValidForState(Pop3State state) { return !state.isAuthenticated(); }
String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); List<StoredMessage> messages;
@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }
String cmd) { try { MailFolder inbox = state.getFolder(); String[] cmdLine = cmd.split(" "); if (cmdLine.length > 1) {
@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }
@Override public boolean isValidForState(Pop3State state) { return state.isAuthenticated(); }