commandfetch.java

来自「java 开发的邮件服务器平台。支持以下协议。 协议可以修改为自己的专门标识」· Java 代码 · 共 833 行 · 第 1/3 页

JAVA
833
字号
                                attrs = currentMailbox.getMessageAttributesUID(uid, user);                                System.out.println("currentMailbox.getMessageAttributesUID("+uid+","+user+")");                            } else {                                attrs = currentMailbox.getMessageAttributes(msn, user);                                System.out.println("currentMailbox.getMessageAttributes("+msn+","+user+")");                            }                            System.out.println("attrs="+((attrs!=null)?attrs.getClass().getName():"null"));                        }                           System.out.println("CommandFetch BODY attrs="+attrs);                            System.out.println("CommandFetch BODY attrs.getUID: "+attrs.getUID());                        if (attrs == null) { // bad                            out.println(tag + SP + msn + SP + NO + "Error retrieving message attributes.");                            getLogger().error("Retrieved null attributes for msn:" + msn);                            return;                        }                        if (responseAdded) {                            response += SP + "BODY " + attrs.getBodyStructure();                        } else {                            response +=  "BODY " + attrs.getBodyStructure();                            responseAdded = true;                        }                    } else if (arg.equalsIgnoreCase("BODYSTRUCTURE")) {                        System.out.println("Starting BODYSTRUCTURE");                        if (attrs == null) {                            if (useUIDs) {                                attrs = currentMailbox.getMessageAttributesUID(uid, user);                            } else {                                attrs = currentMailbox.getMessageAttributes(msn, user);                            }                        }                        if (attrs == null) { // bad                            out.println(tag + SP + msn + SP + NO + "Error retrieving message attributes.");                            getLogger().error("Retrieved null attributes for msn:" + msn);                            return;                        }                        if (responseAdded) {                            response += SP + "BODYSTRUCTURE "+ attrs.getBodyStructure();                        } else {                            response +=  "BODYSTRUCTURE "+ attrs.getBodyStructure();                            responseAdded = true;                        }                    }  else if (arg.equalsIgnoreCase("UID")) {                        System.out.println("CommandFetch UID start");                        if (!useUIDs || fetchAttrs.size() == 1){                            System.out.println("CommandFetch.!useUIDs");                            if (attrs == null) {                                System.out.println("CommandFetch UID fetching attrs: "+attrs);                                attrs = currentMailbox.getMessageAttributes(msn, user);                            }                            uid = attrs.getUID();                            System.out.println("CommandFetch UID attrs: "+attrs);                            System.out.println("CommandFetch UID attrs.getUID: "+attrs.getUID());                            if (attrs == null) { // bad                                out.println(tag + SP + msn + SP + NO + "Error retrieving message attributes.");                                getLogger().error("Retrieved null attributes for msn:" + msn);                                return;                            }                            System.out.println("CommandFetch UID printing UID: "+uid);                            if (responseAdded) {                                response += SP + "UID "+ uid;                            } else {                                response +=  "UID "+ uid;                                responseAdded = true;                            }                        } // don't duplicate on UID FETCH requests                        System.out.println("CommandFetch UID end");                    }                    // commands that can be satisifed with just top-level headers of message and flags                    else if (arg.equalsIgnoreCase("BODY[HEADER]")                            || arg.equalsIgnoreCase("BODY.PEEK[HEADER]")                             || "RFC822.HEADER".equalsIgnoreCase(arg)) {                        System.out.println("Starting BODY[HEADER]");                        if (responseAdded) { // unlikely                            if (useUIDs) {                                response += " UID " + uid + ")";                            } else {                                response += ")";                            }                            System.out.println(response);                            out.println(response);                            getLogger().debug("Sending: " + response);                        }                        InternetHeaders headers = null;                        if (useUIDs) {                            headers = currentMailbox.getInternetHeadersUID(uid, user);                        } else {                            headers = currentMailbox.getInternetHeaders(msn, user);                        }                        if (headers == null) { // bad                            System.out.println(tag + SP + msn + SP + NO + "Error retrieving message1.");                            out.println(tag + SP + msn + SP + NO + "Error retrieving message1.");                            getLogger().error("Retrieved null headers for msn:" + msn);                            return;                        }                        if (flags == null) {                            if (useUIDs) {                                flags = currentMailbox.getFlagsUID(uid, user);                            } else {                                flags = currentMailbox.getFlags(msn, user);                            }                        }                        response = UNTAGGED + SP + msn + SP + "FETCH (";                        response += "BODY[HEADER] ";                                                Enumeration enum = headers.getAllHeaderLines();                        List lines = new ArrayList();                        int count = 0;                        while (enum.hasMoreElements()) {                            String line = (String)enum.nextElement();                            count += line.length() + 2;                            lines.add(line);                        }                        response += "{" + (count + 2) + "}";                        out.println(response);                        System.out.println(response);                        getLogger().debug("Sending: " + response);                        Iterator lit = lines.iterator();                        while (lit.hasNext()) {                            String line = (String)lit.next();                            out.println(line);                            System.out.println(line);                            getLogger().debug("Sending: " + line);                        }                        out.println();                        System.out.println();                        getLogger().debug("Sending blank line");                        if (useUIDs) {                            out.println(  " UID " + uid + ")");                            System.out.println(  " UID " + uid + ")");                            getLogger().debug("Sending: UID " + uid + ")");                        } else {                            out.println( ")" );                            System.out.println( ")" );                            getLogger().debug("Sending: )");                        }                        if (! arg.equalsIgnoreCase("BODY.PEEK[HEADER]")) {                            try { // around setFlags()                                if (flags.indexOf("Seen") == -1 ) {                                    String newflags;                                    if (useUIDs) {                                        currentMailbox.setFlagsUID(uid, user, "+flags (\\Seen)");                                        newflags = currentMailbox.getFlagsUID(uid, user);                                        out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + " UID " + uid +")");                                        System.out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + " UID " + uid +")");                                    } else {                                        currentMailbox.setFlags(msn, user, "+flags (\\Seen)");                                        newflags = currentMailbox.getFlags(msn, user);                                        out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + ")");                                        System.out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + ")");                                    }                                }                            } catch (AccessControlException ace) {                                getLogger().error("Exception storing flags for message: " + ace);                            } catch (AuthorizationException aze) {                                getLogger().error("Exception storing flags for message: " + aze);                            } catch (Exception e) {                                getLogger().error("Unanticipated exception storing flags for message: " + e);                            }                        }                        response = UNTAGGED + SP + msn + SP + "FETCH (";                        responseAdded = false;                    } else if (arg.toUpperCase().startsWith("BODY[HEADER.FIELDS")                               || arg.toUpperCase().startsWith("BODY.PEEK[HEADER.FIELDS")                               || arg.toUpperCase().startsWith("(BODY.PEEK[HEADER.FIELDS")){                        System.out.println("Starting BODY[HEADER.FIELDS]");                        if (responseAdded) {                            if (useUIDs) {                                response += " UID " + uid + ")";                            } else {                                response += ")";                            }                            out.println(response);                            System.out.println(response);                            getLogger().debug("Sending: " + response);                        }                        InternetHeaders headers = null;                        if (useUIDs) {                            headers = currentMailbox.getInternetHeadersUID(uid, user);                        } else {                            headers = currentMailbox.getInternetHeaders(msn, user);                        }                        if (headers == null) { // bad                            out.println(tag + SP + msn + SP + NO + SP + "Error retrieving message2.");                            System.out.println(tag + SP + msn + SP + NO + SP + "Error retrieving message2.");                            getLogger().error("Retrieved null headers for msn:" + msn);                            return;                        }                        if (flags == null) {                            if (useUIDs) {                                flags = currentMailbox.getFlagsUID(uid, user);                            } else {                                flags = currentMailbox.getFlags(msn, user);                            }                        }                        boolean not = (commandRaw.toUpperCase().indexOf("HEADER.FIELDS.NOT") != -1);                        boolean peek = (commandRaw.toUpperCase().indexOf("PEEK") != -1);                        response = UNTAGGED + SP + msn + SP + "FETCH (BODY" ;                        if (peek) {response += ".PEEK";}                        if (not) {                            response += "[HEADER.FIELDS.NOT (";                        } else {                            response += "[HEADER.FIELDS (";                        }                        responseAdded = false;                        //int h = commandRaw.indexOf("[");                        int left = arg.indexOf("(");                        int right = arg.indexOf(")");                        String fieldsRequested = arg.substring(left + 1, right);                        response += fieldsRequested + ")] ";                        ArrayList fields = new ArrayList();                        if (fieldsRequested.indexOf(" ") == -1) { //only one field                            fields.add(fieldsRequested);                        } else {                            StringTokenizer tok = new StringTokenizer(fieldsRequested);                            while (tok.hasMoreTokens()) {                                fields.add((String)tok.nextToken());                            }                        }                        Iterator it2 = fields.iterator();                        while (it2.hasNext()) {                            getLogger().debug("request for field: " + (String)it2.next());                        }                        String[] names = (String[])fields.toArray(new String[fields.size()]);                        Enumeration enum = null;                        if (not) {                            enum = headers.getNonMatchingHeaderLines(names);                        } else {                            enum = headers.getMatchingHeaderLines(names);                        }                        List lines = new ArrayList();                        int count = 0;                        while (enum.hasMoreElements()) {                            String line = (String)enum.nextElement();                            count += line.length() + 2;                            lines.add(line);                        }                        response += "{" + (count + 2) + "}";                        out.println(response);                        System.out.println(response);                        getLogger().debug("Sending: " + response);                        Iterator lit = lines.iterator();                        while (lit.hasNext()) {                            String line = (String)lit.next();                            out.println(line);                            System.out.println(line);                            getLogger().debug("Sending: " + line);                        }                        out.println();                        System.out.println();                        if (useUIDs) {                            out.println(  " UID " + uid + ")");                            System.out.println(  " UID " + uid + ")");                        } else {                            out.println(")");                            System.out.println(")");                        }                        if (! peek) {                            if (flags.indexOf("Seen") == -1 ) {                                try {                                    String newflags;                                    if (useUIDs) {                                        currentMailbox.setFlagsUID(uid, user, "+flags (\\Seen)");                                        newflags = currentMailbox.getFlagsUID(uid, user);                                        out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + " UID " + uid +")");                                        System.out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + " UID " + uid +")");                                    } else {                                        currentMailbox.setFlags(msn, user, "+flags (\\Seen)");                                        newflags = currentMailbox.getFlags(msn, user);                                        out.println(UNTAGGED + SP + msn + SP + "FETCH (FLAGS "                                                    + newflags + ")");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?