{"record":{"id":"14ea9aa61ed255d1","repo":"pentaho/pentaho-kettle","slug":"mail-log-dynamiczipfilenamefieldempty","errorCode":null,"errorMessage":"Mail.Log.DynamicZipFilenameFieldEmpty","messagePattern":"Mail\\.Log\\.DynamicZipFilenameFieldEmpty","errorType":"validation","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/mail/impl/src/main/java/org/pentaho/di/trans/steps/mail/Mail.java","lineNumber":483,"sourceCode":"\n    // Check is replyname field is provided\n    if ( Utils.isEmpty( meta.getReplyAddress() ) ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.ReplyFieldEmpty\" ) );\n    }\n\n    // Check is SMTP server is provided\n    if ( Utils.isEmpty( meta.getServer() ) ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.ServerFieldEmpty\" ) );\n    }\n\n    // Check Attached filenames when dynamic\n    if ( meta.isDynamicFilename() && Utils.isEmpty( meta.getDynamicFieldname() ) ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.DynamicFilenameFieldEmpty\" ) );\n    }\n\n    // Check Attached zipfilename when dynamic\n    if ( meta.isZipFilenameDynamic() && Utils.isEmpty( meta.getDynamicZipFilenameField() ) ) {\n      throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.DynamicZipFilenameFieldEmpty\" ) );\n    }\n\n    validateZipFiles( meta );\n\n    // check authentication\n    if ( meta.isUsingAuthentication().equals( AUTENTICATION_BASIC ) ) {\n      // check authentication user\n      if ( Utils.isEmpty( meta.getAuthenticationUser() ) ) {\n        throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.AuthenticationUserFieldEmpty\" ) );\n      }\n\n      // check authentication pass\n      if ( Utils.isEmpty( meta.getAuthenticationPassword() ) ) {\n        throw new KettleException( BaseMessages.getString( PKG, \"Mail.Log.AuthenticationPasswordFieldEmpty\" ) );\n      }\n    }\n  }\n","sourceCodeStart":465,"sourceCodeEnd":501,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/mail/impl/src/main/java/org/pentaho/di/trans/steps/mail/Mail.java#L465-L501","documentation":"Thrown by Mail.validateMetaFields when zipping attachments is dynamic (meta.isZipFilenameDynamic() is true) but meta.getDynamicZipFilenameField() — the row field supplying the zip file name — is empty. The step needs to know which incoming field holds the zip target name before it can process attached files, so it fails fast in processRow.","triggerScenarios":"Enabling the dynamic zip-filename option in the Mail step without selecting the source field; code-built MailMeta with setZipFilenameDynamic(true) but no setDynamicZipFilenameField(...).","commonSituations":"Configuring dynamic attachments plus zipping and missing the zip-name field dropdown; field reference lost during transformation copy/import between environments.","solutions":["Select the field holding the zip filename in the Mail step's dynamic zip-filename field setting.","Call meta.setDynamicZipFilenameField(\"zipNameField\") when enabling setZipFilenameDynamic(true) in code.","Turn off the dynamic zip-filename option if a static zip name is intended, and set the static zip filename instead."],"exampleFix":"// before\nmeta.setZipFilenameDynamic(true);\n// after\nmeta.setZipFilenameDynamic(true);\nmeta.setDynamicZipFilenameField(\"zipNameField\");","handlingStrategy":"validation","validationCode":"if ( meta.isZipFilenameDynamic() && ( meta.getDynamicZipFilenameField() == null || meta.getDynamicZipFilenameField().trim().isEmpty() ) ) {\n  throw new IllegalArgumentException(\"Mail step: dynamic zip filename field must be selected\");\n}","typeGuard":null,"tryCatchPattern":"try { transformation.execute(); } catch ( KettleException e ) { if ( e.getMessage().contains(\"DynamicZipFilenameFieldEmpty\") ) { /* set setDynamicZipFilenameField or disable dynamic zip */ } else { throw e; } }","preventionTips":["Enable dynamic zip naming only together with a chosen field","Audit Mail step XML for zipFilenameDynamic=true without a field attribute","Document required fields when templating Mail steps"],"tags":["kettle","mail-step","validation","zip","dynamic-fields"],"backgroundTag":"empty-required-field","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"}