pentaho/pentaho-kettle · error · KettleException

JobGetMailsFromPOP.Error.OutputFolderNotExist

Error message

JobGetMailsFromPOP.Error.OutputFolderNotExist

What it means

createOutputDirectory(FOLDER_OUTPUT): when the resolved output folder does not exist and isCreateLocalFolder() is false, the entry refuses to create it and throws this KettleException with the folder name as a parameter. It honors the 'create folder' option instead of silently auto-creating directories.

Solutions

  1. Create the output directory manually at the configured path before running the job.
  2. Enable the 'Create local folder' option in the job entry so it auto-creates missing directories.
  3. Verify the path (mount points, permissions) is available in the runtime environment where kitchen executes the job.

Example fix

// before
if ( isCreateLocalFolder() ) { folder.createFolder(); } else { throw ... }
// after (fix in dialog): check 'Create folder'
<create_local_folder>Y</create_local_folder>
Defensive patterns

Strategy: validation

Validate before calling

File out = new File(environmentSubstitute(getOutputFolder()));
if (!out.exists() && !out.mkdirs()) {
  throw new IllegalArgumentException("Output directory missing and could not be created: " + out);
}

Try / catch

try { executeJobEntry(); } catch (KettleException e) {
  if (e.getMessage().contains("OutputFolderNotExist")) {
    logError("Output directory does not exist: " + e.getMessage() + " — create it or enable 'Create local folder'");
  } else { throw e; }
}

Prevention

When it happens

Trigger: folder.exists() is false, isCreateLocalFolder() returns false, and folderType is FOLDER_OUTPUT — i.e. output directory missing on disk and 'Create local folder' (or equivalent option) not checked.

Common situations: Job configured on one machine then run on another (kitchen) where the directory does not exist; network share unmounted so the path is missing; 'create folder' checkbox deliberately unchecked but directory was later deleted.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/1672eb2a9c21bf66. Report an issue: GitHub.

Appendix: source

Thrown at plugins/email-messages/impl/src/main/java/org/pentaho/di/job/entries/getpop/JobEntryGetPOP.java:1613

        }
      }
      if ( isDebug() ) {
        switch ( folderType ) {
          case JobEntryGetPOP.FOLDER_OUTPUT:
            logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.Log.OutputFolderExists", folderName ) );
            break;
          case JobEntryGetPOP.FOLDER_ATTACHMENTS:
            logDebug( BaseMessages.getString( PKG, "JobGetMailsFromPOP.Log.AttachmentFolderExists", folderName ) );
            break;
        }
      }
    } else {
      if ( isCreateLocalFolder() ) {
        folder.createFolder();
      } else {
        switch ( folderType ) {
          case JobEntryGetPOP.FOLDER_OUTPUT:
            throw new KettleException( BaseMessages.getString(
              PKG, "JobGetMailsFromPOP.Error.OutputFolderNotExist", folderName ) );
          case JobEntryGetPOP.FOLDER_ATTACHMENTS:
            throw new KettleException( BaseMessages.getString(
              PKG, "JobGetMailsFromPOP.Error.AttachmentFolderNotExist", folderName ) );
        }
      }
    }

    String returnValue = KettleVFS.getFilename( folder );
    try {
      folder.close();
    } catch ( IOException ignore ) {
      //Ignore error, as the folder was created successfully
    }
    return returnValue;
  }
}

View on GitHub (pinned to f3058517a1)