{"record":{"id":"acd896c33ee87b26","repo":"pentaho/pentaho-kettle","slug":"jobgetmailsfrompop-invalidfolder-label","errorCode":null,"errorMessage":"JobGetMailsFromPOP.InvalidFolder.Label","messagePattern":"JobGetMailsFromPOP\\.InvalidFolder\\.Label","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/email-messages/impl/src/main/java/org/pentaho/di/job/entries/getpop/MailConnection.java","lineNumber":515,"sourceCode":"      this.folder = getRecursiveFolder( MailConnectionMeta.INBOX_FOLDER );\n    }\n\n    if ( this.folder == null ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"JobGetMailsFromPOP.InvalidDefaultFolder.Label\" ) );\n    }\n\n    if ( ( folder.getType() & Folder.HOLDS_MESSAGES ) == 0 ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"MailConnection.DefaultFolderCanNotHoldMessage\" ) );\n    }\n  }\n\n  private void openSpecifiedFolder( String foldername ) throws KettleException, MessagingException {\n    if ( this.protocol == MailConnectionMeta.PROTOCOL_IMAP\n      || this.protocol == MailConnectionMeta.PROTOCOL_MBOX ) {\n      this.folder = getRecursiveFolder( foldername );\n    }\n    if ( this.folder == null || !this.folder.exists() ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"JobGetMailsFromPOP.InvalidFolder.Label\" ) );\n    }\n  }\n\n  private void openFolderWithMode() throws MessagingException {\n    if ( this.write ) {\n      if ( log.isDebug() ) {\n        log.logDebug( BaseMessages.getString(\n          PKG, \"MailConnection.OpeningFolderInWriteMode.Label\", getFolderName() ) );\n      }\n      this.folder.open( Folder.READ_WRITE );\n    } else {\n      if ( log.isDebug() ) {\n        log.logDebug( BaseMessages.getString(\n          PKG, \"MailConnection.OpeningFolderInReadMode.Label\", getFolderName() ) );\n      }\n      this.folder.open( Folder.READ_ONLY );\n    }\n  }","sourceCodeStart":497,"sourceCodeEnd":533,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/email-messages/impl/src/main/java/org/pentaho/di/job/entries/getpop/MailConnection.java#L497-L533","documentation":"openSpecifiedFolder() throws this when the user-requested folder is null after getRecursiveFolder() or does not exist in the store (folder.exists() == false). The configured folder name doesn't match anything on the server.","triggerScenarios":"openFolder(foldername, defaultFolder=false) → openSpecifiedFolder where this.folder == null || !this.folder.exists().","commonSituations":"Typo in folder name, wrong path separator (IMAP uses '.' or '/' per server), folder renamed/deleted, case-sensitivity differences, mbox directory path wrong.","solutions":["Correct the folder name to the exact server-side path (check in Thunderbird/webmail; IMAP hierarchy delimiter is usually '.').","Verify the folder still exists and the account can see it.","For nested folders use the server's hierarchy delimiter, e.g. INBOX.Archive.2024.","If the folder may be absent, guard with store.getFolder(name) + exists() check before opening."],"exampleFix":"// before\nopenFolder(\"inbox/archive\", false);\n// after (IMAP delimiter is '.')\nopenFolder(\"INBOX.Archive\", false);","handlingStrategy":"validation","validationCode":"mailConnection.connect();\nString name = \"INBOX.Archive\";\njavax.mail.Folder f = mailConnection.getStore().getFolder(name);\nif (f == null || !f.exists()) {\n  throw new KettleException(\"Folder does not exist on server: \" + name);\n}","typeGuard":null,"tryCatchPattern":"try {\n  mailConnection.openFolder(folderName, false);\n} catch (KettleException e) {\n  logError(\"Invalid folder '\" + folderName + \"', check server-side path\", e);\n  throw e;\n}","preventionTips":["List folders via store.getDefaultFolder().list(\"*\") during development to copy exact names","Use the server's hierarchy delimiter","Validate folder names in the job entry dialog","Watch for renames/deletions between job runs"],"tags":["javamail","imap","folder","kettle","email"],"backgroundTag":"file-not-found","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}