@Override
    protected Event doExecuteInternal(final RequestContext requestContext) {
        try {
            val emailAddress = requestContext.getRequestParameters().getRequired("email");
            if (isAcceptableEmailAddress(emailAddress)) {
                val authentication = WebUtils.getAuthentication(requestContext);
                val principal = resolvePrincipal(authentication.getPrincipal(), requestContext);
                LOGGER.debug("Received email address [{}] for [{}]", emailAddress, principal.getId());
                val token = getOrCreateToken(requestContext, principal);
                token.putProperty(TOKEN_PROPERTY_EMAIL_TO_REGISTER, emailAddress);
                val cmd = CasSimpleMultifactorSendEmail.of(communicationsManager, properties, tenantExtractor);
                val emailSent = cmd.send(principal, token, List.of(emailAddress), requestContext).isAnyEmailSent();
                if (emailSent) {
                    LOGGER.debug("Email [{}] is sent to [{}]", emailAddress, principal.getId());
                    storeToken(requestContext, token);
                    return success(token);
                }
            }
        } catch (final Throwable e) {
            LoggingUtils.error(LOGGER, e);
        }
        WebUtils.addErrorMessageToContext(requestContext, ERROR_CODE_EMAIL_FAILED);
        return error();
    }
Token property to hold the email address that one wants to register.
support/cas-server-support-simple-mfa-core/src/main/java/org/apereo/cas/mfa/simple/web/flow/CasSimpleMultifactorVerifyEmailAction.java