void fetchOneFolder()

in plugins/misc/mail/src/main/java/org/apache/hop/mail/workflow/actions/getpop/ActionGetPOP.java [738:1137]


  void fetchOneFolder(
      boolean usePOP3,
      String realIMAPFolder,
      String realOutputFolder,
      String targetAttachmentFolder,
      String realMoveToIMAPFolder,
      String realFilenamePattern,
      int nbrmailtoretrieve,
      SimpleDateFormat df)
      throws HopException {
    try {
      // if it is not pop3 and we have non-default imap folder...
      if (!usePOP3 && !Utils.isEmpty(realIMAPFolder)) {
        if (connection != null) {
          connection.openFolder(realIMAPFolder, true);
        } else {
          mailConn.openFolder(realIMAPFolder, true);
        }
      } else {
        if (connection != null) {
          connection.openFolder(true);
        } else {
          mailConn.openFolder(true);
        }
      }

      if (connection != null) {
        connection.retrieveMessages();
      } else {
        mailConn.retrieveMessages();
      }

      int messagesCount;
      if (connection != null) {
        messagesCount = connection.getMessagesCount();
      } else {
        messagesCount = mailConn.getMessagesCount();
      }

      if (isDetailed()) {
        logDetailed(
            BaseMessages.getString(
                PKG,
                "ActionGetMailsFromPOP.TotalMessagesFolder.Label",
                "" + messagesCount,
                (connection != null)
                    ? Const.NVL(connection.getFolderName(), MailServerConnection.INBOX_FOLDER)
                    : Const.NVL(mailConn.getFolderName(), MailConnectionMeta.INBOX_FOLDER)));
      }

      messagesCount =
          nbrmailtoretrieve > 0
              ? (nbrmailtoretrieve > messagesCount ? messagesCount : nbrmailtoretrieve)
              : messagesCount;

      if (messagesCount > 0) {
        if (connection != null) {
          switch (getActionType()) {
            case MailServerConnection.ACTION_TYPE_DELETE:
              if (nbrmailtoretrieve > 0) {
                // We need to fetch all messages in order to retrieve
                // only the first nbrmailtoretrieve ...
                for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                  // Get next message
                  connection.fetchNext();
                  // Delete this message
                  connection.deleteMessage();
                  if (isDebug()) {
                    logDebug(BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + i));
                  }
                }
              } else {
                // Delete messages
                connection.deleteMessages(true);
                if (isDebug()) {
                  logDebug(
                      BaseMessages.getString(
                          PKG, "ActionGetMailsFromPOP.MessagesDeleted", "" + messagesCount));
                }
              }
              break;
            case MailServerConnection.ACTION_TYPE_MOVE:
              if (nbrmailtoretrieve > 0) {
                // We need to fetch all messages in order to retrieve
                // only the first nbrmailtoretrieve ...
                for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                  // Get next message
                  connection.fetchNext();
                  // Move this message
                  connection.moveMessage();
                  if (isDebug()) {
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.MessageMoved",
                            "" + i,
                            realMoveToIMAPFolder));
                  }
                }
              } else {
                // Move all messages
                connection.moveMessages();
                if (isDebug()) {
                  logDebug(
                      BaseMessages.getString(
                          PKG,
                          "ActionGetMailsFromPOP.MessagesMoved",
                          "" + messagesCount,
                          realMoveToIMAPFolder));
                }
              }
              break;
            default:
              // Get messages and save it in a local file
              // also save attached files if needed
              for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                // Get next message
                connection.fetchNext();
                int messagenumber = connection.getMessage().getMessageNumber();
                boolean okPOP3 = usePOP3 ? true : false;
                boolean okIMAP = !usePOP3;

                if (okPOP3 || okIMAP) {
                  // display some infos on the current message
                  //
                  if (isDebug() && connection.getMessage() != null) {
                    logDebug("--------------------------------------------------");
                    logDebug(
                        BaseMessages.getString(
                            PKG, "ActionGetMailsFromPOP.MessageNumber.Label", "" + messagenumber));
                    if (connection.getMessage().getReceivedDate() != null) {
                      logDebug(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.ReceivedDate.Label",
                              df.format(connection.getMessage().getReceivedDate())));
                    }
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.ContentType.Label",
                            connection.getMessage().getContentType()));
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.EmailFrom.Label",
                            Const.NVL(connection.getMessage().getFrom()[0].toString(), "")));
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.EmailSubject.Label",
                            Const.NVL(connection.getMessage().getSubject(), "")));
                  }
                  if (isSaveMessage()) {
                    // get local message filename
                    String localfilenameMessage = replaceTokens(realFilenamePattern, i);

                    if (isDebug()) {
                      logDebug(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.LocalFilename.Label",
                              localfilenameMessage));
                    }

                    // save message content in the file
                    connection.saveMessageContentToFile(localfilenameMessage, realOutputFolder);
                    // explicitly set message as read
                    connection.getMessage().setFlag(Flag.SEEN, true);

                    if (isDetailed()) {
                      logDetailed(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.MessageSaved.Label",
                              "" + messagenumber,
                              localfilenameMessage,
                              realOutputFolder));
                    }
                  }

                  // Do we need to save attached file?
                  if (isSaveAttachment()) {
                    connection.saveAttachedFiles(targetAttachmentFolder, attachementPattern);
                  }
                  // We successfully retrieved message
                  // do we need to make another action (delete, move)?
                  if (usePOP3) {
                    if (isDelete()) {
                      connection.deleteMessage();
                      if (isDebug()) {
                        logDebug(
                            BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
                      }
                    }
                  } else {
                    switch (getAfterGetIMAP()) {
                      case MailServerConnection.AFTER_GET_IMAP_DELETE:
                        // Delete messages
                        connection.deleteMessage();
                        if (isDebug()) {
                          logDebug(
                              BaseMessages.getString(
                                  PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
                        }
                        break;
                      case MailServerConnection.AFTER_GET_IMAP_MOVE:
                        // Move messages
                        connection.moveMessage();
                        if (isDebug()) {
                          logDebug(
                              BaseMessages.getString(
                                  PKG,
                                  "ActionGetMailsFromPOP.MessageMoved",
                                  "" + messagenumber,
                                  realMoveToIMAPFolder));
                        }
                        break;
                      default:
                    }
                  }
                }
              }
              break;
          }
        } else {
          switch (getActionType()) {
            case MailConnectionMeta.ACTION_TYPE_DELETE:
              if (nbrmailtoretrieve > 0) {
                // We need to fetch all messages in order to retrieve
                // only the first nbrmailtoretrieve ...
                for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                  // Get next message
                  mailConn.fetchNext();
                  // Delete this message
                  mailConn.deleteMessage();
                  if (isDebug()) {
                    logDebug(BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + i));
                  }
                }
              } else {
                // Delete messages
                mailConn.deleteMessages(true);
                if (isDebug()) {
                  logDebug(
                      BaseMessages.getString(
                          PKG, "ActionGetMailsFromPOP.MessagesDeleted", "" + messagesCount));
                }
              }
              break;
            case MailConnectionMeta.ACTION_TYPE_MOVE:
              if (nbrmailtoretrieve > 0) {
                // We need to fetch all messages in order to retrieve
                // only the first nbrmailtoretrieve ...
                for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                  // Get next message
                  mailConn.fetchNext();
                  // Move this message
                  mailConn.moveMessage();
                  if (isDebug()) {
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.MessageMoved",
                            "" + i,
                            realMoveToIMAPFolder));
                  }
                }
              } else {
                // Move all messages
                mailConn.moveMessages();
                if (isDebug()) {
                  logDebug(
                      BaseMessages.getString(
                          PKG,
                          "ActionGetMailsFromPOP.MessagesMoved",
                          "" + messagesCount,
                          realMoveToIMAPFolder));
                }
              }
              break;
            default:
              // Get messages and save it in a local file
              // also save attached files if needed
              for (int i = 0; i < messagesCount && !parentWorkflow.isStopped(); i++) {
                // Get next message
                mailConn.fetchNext();
                int messagenumber = mailConn.getMessage().getMessageNumber();
                boolean okPOP3 = usePOP3 ? true : false;
                boolean okIMAP = !usePOP3;

                if (okPOP3 || okIMAP) {
                  // display some infos on the current message
                  //
                  if (isDebug() && mailConn.getMessage() != null) {
                    logDebug("--------------------------------------------------");
                    logDebug(
                        BaseMessages.getString(
                            PKG, "ActionGetMailsFromPOP.MessageNumber.Label", "" + messagenumber));
                    if (mailConn.getMessage().getReceivedDate() != null) {
                      logDebug(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.ReceivedDate.Label",
                              df.format(mailConn.getMessage().getReceivedDate())));
                    }
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.ContentType.Label",
                            mailConn.getMessage().getContentType()));
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.EmailFrom.Label",
                            Const.NVL(mailConn.getMessage().getFrom()[0].toString(), "")));
                    logDebug(
                        BaseMessages.getString(
                            PKG,
                            "ActionGetMailsFromPOP.EmailSubject.Label",
                            Const.NVL(mailConn.getMessage().getSubject(), "")));
                  }
                  if (isSaveMessage()) {
                    // get local message filename
                    String localfilenameMessage = replaceTokens(realFilenamePattern, i);

                    if (isDebug()) {
                      logDebug(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.LocalFilename.Label",
                              localfilenameMessage));
                    }

                    // save message content in the file
                    mailConn.saveMessageContentToFile(localfilenameMessage, realOutputFolder);
                    // explicitly set message as read
                    mailConn.getMessage().setFlag(Flag.SEEN, true);

                    if (isDetailed()) {
                      logDetailed(
                          BaseMessages.getString(
                              PKG,
                              "ActionGetMailsFromPOP.MessageSaved.Label",
                              "" + messagenumber,
                              localfilenameMessage,
                              realOutputFolder));
                    }
                  }

                  // Do we need to save attached file?
                  if (isSaveAttachment()) {
                    mailConn.saveAttachedFiles(targetAttachmentFolder, attachementPattern);
                  }
                  // We successfully retrieved message
                  // do we need to make another action (delete, move)?
                  if (usePOP3) {
                    if (isDelete()) {
                      mailConn.deleteMessage();
                      if (isDebug()) {
                        logDebug(
                            BaseMessages.getString(PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
                      }
                    }
                  } else {
                    switch (getAfterGetIMAP()) {
                      case MailConnectionMeta.AFTER_GET_IMAP_DELETE:
                        // Delete messages
                        mailConn.deleteMessage();
                        if (isDebug()) {
                          logDebug(
                              BaseMessages.getString(
                                  PKG, CONST_MESSAGE_DELETED, "" + messagenumber));
                        }
                        break;
                      case MailConnectionMeta.AFTER_GET_IMAP_MOVE:
                        // Move messages
                        mailConn.moveMessage();
                        if (isDebug()) {
                          logDebug(
                              BaseMessages.getString(
                                  PKG,
                                  "ActionGetMailsFromPOP.MessageMoved",
                                  "" + messagenumber,
                                  realMoveToIMAPFolder));
                        }
                        break;
                      default:
                    }
                  }
                }
              }
              break;
          }
        }
      }
    } catch (Exception e) {
      throw new HopException(e);
    }
  }