pentaho/pentaho-kettle · error · KettleException
MailValidator.Error.ResultFieldNameMissing
Error message
MailValidator.Error.ResultFieldNameMissing
What it means
MailValidator.processRow() throws this KettleException during step initialization when the configured result field name is empty. Every Mail Validator step must write its boolean/string result into a named output field; without one the step cannot build its output row metadata.
Solutions
- Open the Mail Validator step dialog and set the 'result fieldname' (e.g. 'isValidEmail').
- If using a variable for the field name, ensure it is defined (via kettle.properties, parameters, or Set Variables).
- Validate meta.getResultFieldName() before executing the transformation programmatically.
- Set the field name in code: meta.setResultFieldName("isValidEmail").
Example fix
// before meta.setResultFieldName( null ); // after meta.setResultFieldName( "isValidEmail" );
Defensive patterns
Strategy: validation
Validate before calling
// Before executing the transformation
if ( meta.getResultFieldName() == null || environmentSubstitute( meta.getResultFieldName() ).isEmpty() ) {
throw new IllegalArgumentException( "Mail Validator result fieldname must be set" );
} Try / catch
try {
trans.execute( null );
} catch ( KettleException e ) {
if ( e.getMessage().contains( "ResultFieldNameMissing" ) ) {
logError( "Set the result fieldname on the Mail Validator step" );
}
throw e;
} Prevention
- Always set a result fieldname when configuring the step.
- Avoid undefined variables in field-name settings.
- Re-check step settings after copying between transformations.
- Use the step dialog's field picker rather than free text where possible.
When it happens
Trigger: Running the transformation with a Mail Validator step whose 'result fieldname' setting is blank (or resolves to empty after variable substitution).
Common situations: Step copied from another transformation with the field cleared; a variable used for the field name is undefined at runtime; step configured programmatically without calling setResultFieldName().
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- MailValidator.Error.FilenameFieldMissing
- MailValidator.Error.DefaultSMTPFieldMissing
- MailValidator.Error.EMailNotValidMsgMissing
- MailValidator.Error.EMailValidMsgMissing
- MailValidator.Exception.CouldnotFindField
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/86dbd0aac7c70b1e.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/mail-validator/impl/src/main/java/org/pentaho/di/trans/steps/mailvalidator/MailValidator.java:73
setOutputDone();
return false;
}
if ( first ) {
first = false;
// get the RowMeta
data.previousRowMeta = getInputRowMeta().clone();
data.NrPrevFields = data.previousRowMeta.size();
data.outputRowMeta = getInputRowMeta().clone();
meta.getFields( getTransMeta().getBowl(), data.outputRowMeta, getStepname(), null, null, this, repository,
metaStore );
// check result fieldname
data.realResultFieldName = environmentSubstitute( meta.getResultFieldName() );
if ( Utils.isEmpty( data.realResultFieldName ) ) {
throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.ResultFieldNameMissing" ) );
}
if ( meta.isResultAsString() ) {
if ( Utils.isEmpty( meta.getEMailValideMsg() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.EMailValidMsgMissing" ) );
}
if ( Utils.isEmpty( meta.getEMailNotValideMsg() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.EMailNotValidMsgMissing" ) );
}
data.msgValidMail = environmentSubstitute( meta.getEMailValideMsg() );
data.msgNotValidMail = environmentSubstitute( meta.getEMailNotValideMsg() );
}
// Check is email address field is provided
if ( Utils.isEmpty( meta.getEmailField() ) ) {
throw new KettleException( BaseMessages.getString( PKG, "MailValidator.Error.FilenameFieldMissing" ) );View on GitHub (pinned to f3058517a1)