⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imap4.java

📁 手机邮箱撒的方式方式方式的
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            	Functions.addMailsInStorageToVector( getTargetBox().getStorage(), tempStorage );
            	getTargetBox().setStorage( Algorithm.getAlgorithm().invoke( tempStorage ) );
            	System.gc();
            }
              if (DEBUG) System.out.println("DEBUG GetMailsTask.doRunWork() - Mails stored to the box.");
            long wholeTime = System.currentTimeMillis() - startTime;
            String waitTime = wholeTime > 1000 ? wholeTime / 1000 + "sec" : wholeTime + "msec";
            inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_CHECK_MAILS) + account.getEmail() + "" + Lang.get(Lang.IN) + waitTime);
        } catch (MyException myException) {
            myException.printStackTrace();
            resolveMyExceptionRun(myException);
        } catch (Exception ex) {
            ex.printStackTrace();
            resolveExceptions("100: " + ex + "/ " + account.getEmail(), SOURCE_FILE);
        }

        if (DEBUG) System.out.println("DEBUG GetMailsTask.doRunWork() - Mails retrieved");
    }

    protected void downloadBody() {
        if (DEBUG) System.out.println("DEBUG IMAP4.downloadBody starting downloading body.");
        try {
            if (DEBUG) System.out.println("DEBUG IMAP4.DownloadBodyTask.doRunWork starting");
            long startTime = System.currentTimeMillis();
            if (!open(inProtocolTask)) {
                if (DEBUG) System.out.println("DEBUG IMAP4.DownloadBodyTask.doRunWork cannot open connection");
                synchronized (actHeader) {
                    actHeader.notify();
                    actHeader = null;
                }
                if (DEBUG) System.out.println("DEBUG IMAP4.DownloadBodyTask.doRunWork returning");
                return;
            }

            if (DEBUG) System.out.println("DEBUG IMAP4.DownloadBodyTask.doRunWork connection opened");

            inProtocolTask.setTitle(Lang.get(runMode == RETRIEVE_BODY ? Lang.ALRT_INPL_DOWN_MAIL : Lang.ALRT_INPL_REDOWN_MAIL) + actHeader.getSubject());
            inProtocolTask.updateProgress(actHeader.getSize(), 0);
            String sld_box = actHeader.getMessageID().substring(0, actHeader.getMessageID().lastIndexOf(MessageHeader.MSG_ID_SEPARATOR) + 1);
             //if the actually selected mailbox differs from header's mailBox
            if (sld_mailBox_uidval == null || !sld_mailBox_uidval.equals(sld_box)) {
                //select header's mailBox
                if (!selectMailBox(actHeader.getIMAPFolder())) {
                    throw new MyException(MyException.PROTOCOL_CANNOT_RETRIEVE_BODY, Lang.get(Lang.ALRT_INPL_IMAP_CANNOT_SELECT_MAILBOX) + sld_box.substring(sld_box.indexOf(0, MessageHeader.MSG_ID_SEPARATOR)));
                }
                if (!sld_mailBox_uidval.equals(sld_box)) {
                    throw new MyException(MyException.PROTOCOL_CANNOT_RETRIEVE_BODY, Lang.get(Lang.ALRT_INPL_IMAP_UIDVALIDITY_DIFFERS));
                }
            }
            String fetchTag;
            if (runMode == RETRIEVE_BODY || (runMode == REDOWNLOAD_BODY && reDownloadMode == -1)) {
                fetchTag = execute("UID FETCH " + parseUID(actHeader.getMessageID()) + " (FLAGS RFC822)", false);
            } else if (runMode == CONVERT_BODY) {
            	String extension = actHeader.getBodyPart(reDownloadMode).getHeader().getExtension();
            	if ("pdf".equalsIgnoreCase(extension)) {
            	    fetchTag = execute("xmujmail-convert pdf " + parseUID(actHeader.getMessageID()) + " (FLAGS BINARY" + "[" + (reDownloadMode + 1) + "])", false);
            	}
            	else { //JPEG conversion
            		int size = MujMail.mujmail.getMenu().getHeight();
            		fetchTag = execute("xmujmail-convert jpg " + Integer.toString(size) + " " + parseUID(actHeader.getMessageID()) + " (FLAGS BINARY" + "[" + (reDownloadMode + 1) + "])", false);            		
            	}
            } else {
                fetchTag = execute("UID FETCH " + parseUID(actHeader.getMessageID()) + " (FLAGS BODY" + "[" + (reDownloadMode + 1) + "])", false);
            }

            String line = "";
            do { //skip useless lines fetch response
                line = connection.getLine();
            } while (!(line.startsWith(fetchTag) || line.indexOf("UID " + parseUID(actHeader.getMessageID())) != -1));
            if (line.startsWith(fetchTag)) {
                throw new MyException(MyException.PROTOCOL_CANNOT_RETRIEVE_BODY, "200: " + Lang.get(Lang.ALRT_INPL_NO_LONGER_ON_SERVER));
            }

            //Check for '\Seen', '\Answered', '\Flagged' and '\Deleted' flags
            indexOfFlags = line.indexOf("FLAGS (");
            if (indexOfFlags != -1) //FLAGS parameter is given first
            {
                flags = line.substring(indexOfFlags + 7);
                flags = flags.substring(0, flags.indexOf(")"));
                handleFlags(actHeader, flags);
            } else //FLAGS parameter is given last
            {
                END_OF_MAIL = " FLAGS (";
            }

            if (DEBUG) System.out.println("DEBUG - IMAP4.downloadBody - before parsing body");
            parseBody(actHeader, inProtocolTask);
            if (DEBUG) System.out.println("DEBUG - IMAP4.downloadBody - after parsing body");

            actHeader.saveHeader();

            if (Settings.safeMode) {
                getTargetBox().setLastSafeMail(actHeader);
            }

            long wholeTime = System.currentTimeMillis() - startTime;
            String waitTime = wholeTime > 1000 ? wholeTime / 1000 + "sec" : wholeTime + "msec";
            inProtocolTask.setTitle("*" + Lang.get(runMode == RETRIEVE_BODY ? Lang.ALRT_INPL_DOWN_MAIL : Lang.ALRT_INPL_REDOWN_MAIL) + actHeader.getSubject() + " " + Lang.get(Lang.IN) + waitTime);
            inProtocolTask.updateProgress(actHeader.getSize(), actHeader.getSize());

            synchronized (actHeader) { //everything is ok now
                actHeader.notify();
                actHeader = null;
            }
        } catch (MyException myException) {
            resolveMyExceptionRun(myException);
        }
    }

    protected void removeMails() {
        try {
            long startTime = System.currentTimeMillis();
            if (deleted.isEmpty() || !open(inProtocolTask)) {
                return;
            }
            inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_DEL_MAILS) + account.getEmail());

            inProtocolTask.updateProgress(deleted.size(), 0);
            //let's sort the marked mails by their mailboxes
            //so we don't have to reselect mailboxes for every mail having the same mailbox
            Functions.sort(deleted, Functions.SRT_ORDER_INC, Functions.SRT_HDR_MSGID);
            String msgID;
            int actual = 0;
            int i = 0,
                    j = 0;

            for (actual = deleted.size() -1 ; actual >= 0; --actual) {
                msgID = ((MessageHeader) deleted.elementAt(actual)).getMessageID();
                String sld_box = msgID.substring(0, msgID.lastIndexOf(MessageHeader.MSG_ID_SEPARATOR) + 1); //this mail's mail box
                j = sld_box.indexOf(MessageHeader.MSG_ID_SEPARATOR);
                //if we're gonna select another mailbox, expunge the currently selected mailbox
                if (i != 0 && (i != j || !sld_mailBox_uidval.regionMatches(false, 0, sld_box, 0, j))) {
                    execute("EXPUNGE", true);
                }

                //if no mailbox was set or the actually selected mailbox differs from header's mailBox
                if (i != j || !sld_mailBox_uidval.regionMatches(false, 0, sld_box, 0, j)) {
                    i = 0;
                    //select header's mailBox
                    if (!selectMailBox(sld_box.substring(0, j))) {
                    	inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_IMAP_CANNOT_SELECT_MAILBOX) + sld_box.substring(sld_box.indexOf(0, MessageHeader.MSG_ID_SEPARATOR)));
                        //don't consider this as deleted from the server
                        //and don't remove it from the onceDownloaded cache to prevent redownloading it again
                        deleted.removeElementAt(actual);
                        continue;
                    }
                    i = sld_mailBox_uidval.indexOf(MessageHeader.MSG_ID_SEPARATOR);
                }

                //if the mailbox has changed its UIDVALIDITY from the previous session
                if (!sld_mailBox_uidval.equals(sld_box)) {
                	inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_IMAP_UIDVALIDITY_DIFFERS));
                    deleted.removeElementAt(actual);
                } else {
                    execute("UID STORE " + parseUID(msgID) + " +FLAGS (\\Deleted)", false);
                }

                removeMessageFromBox(actual);

                if (inProtocolTask.stopped()) {
                    break;
                }

            }
            if (actual != 0) {
                execute("EXPUNGE", true);
            }

            deleted.removeAllElements();

            long wholeTime = System.currentTimeMillis() - startTime;
            String waitTime = wholeTime > 1000 ? wholeTime / 1000 + "sec" : wholeTime + "msec";
            inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_DEL_MAILS) + account.getEmail() + Lang.get(Lang.IN) + waitTime);
        } catch (MyException myException) {
            myException.printStackTrace();
            resolveMyExceptionRun(myException);
        }
    }

    protected void setFlags() {
        try {
            //try to open connection
            if (!open(inProtocolTask)) {
                throw new MyException(MyException.PROTOCOL_CANNOT_CONNECT);

            }
            String messageID = actHeader.getMessageID();

            String sld_box = messageID.substring(0, messageID.lastIndexOf(MessageHeader.MSG_ID_SEPARATOR) + 1); //this mail's mail box

            selectMailBox(actHeader.getIMAPFolder());

            //if the mailbox has changed its UIDVALIDITY from the previous session
            if (!sld_mailBox_uidval.equals(sld_box)) {
            	inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_IMAP_UIDVALIDITY_DIFFERS));
            } else {
                execute("UID STORE " + parseUID(messageID) + " +FLAGS " + flagsToSet, false);
            }

            synchronized (actHeader) { //everything is ok now
                actHeader.notify();
                actHeader = null;
            }
        } catch (MyException myException) {
            resolveMyExceptionRun(myException);
        }
    }

    protected void removeFlags() {
        try {
            //try to open connection
            if (!open(inProtocolTask)) {
                throw new MyException(MyException.PROTOCOL_CANNOT_CONNECT);

            }
            String mesgID = actHeader.getMessageID();

            String sld_box = mesgID.substring(0, mesgID.lastIndexOf(MessageHeader.MSG_ID_SEPARATOR) + 1); //this mail's mail box

            selectMailBox(actHeader.getIMAPFolder());

            //if the mailbox has changed its UIDVALIDITY from the previous session
            if (!sld_mailBox_uidval.equals(sld_box)) {
            	inProtocolTask.setTitle(Lang.get(Lang.ALRT_INPL_IMAP_UIDVALIDITY_DIFFERS));
            } else {
                execute("UID STORE " + parseUID(mesgID) + " -FLAGS " + flagsToSet, false);
            }
            
            synchronized (actHeader) { //everything is ok now
                actHeader.notify();
                actHeader = null;
            }
        } catch (MyException myException) {
            resolveMyExceptionRun(myException);
        }
    }
    
    /* MUJMAIL IMAP4 PROTOCOL EXTENSIONS */
    
    String URL = null;
    public synchronized String getURL( String url) {
        runMode = IMAP4.GET_URL;
        URL = url;
        inProtocolTask = new InProtocolTask(this, "Retrieving URL page");
        inProtocolTask.start();
        return URL;
    }
    protected void getURL() throws MyException {
        if ( URL == null ) return;
        if ( isConnected() == false ) {
            open(null);
        }
        String tag = execute( "XmujMail-url processed noncompacted \"" + URL + "\"", false);
        
        String reply = connection.getLine();
        // parse reply
        if ( reply.startsWith(tag) ) {
            URL = null;

            String errorTag = tag + " BAD ";
            if ( reply.startsWith(errorTag) )                 
                throw new MyException( MyException.PROTOCOL_BASE, "200: " + "Internal error - bad syntax" + reply.substring( errorTag.length()));
            
            String problemTag = tag + " NO ";
            if ( reply.startsWith( problemTag) ) {
                System.out.println("Error report IMAP4.getURLCommand:" + reply);
                throw new MyException(MyException.PROTOCOL_CANNOT_GET_URL, "200: " + Lang.get(Lang.ALRT_INPL_IMAP_GETURL_NO_PAGE) + "Debug server reply:" + reply);

⌨️ 快捷键说明

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