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 + -
显示快捷键?