private Event buildSelectRecipientsEvent(final RequestContext requestContext, final Principal principal,
                                             final Map<TokenSharingStrategyOptions, List<String>> recipients) {
        val eventAttributes = new LocalAttributeMap<>();

        val emailRecipients = recipients.get(TokenSharingStrategyOptions.EMAIL);
        if (emailRecipients != null) {
            val emailDomainPattern = Pattern.compile(".{2}@.{2}");
            val validAddresses = emailRecipients
                .stream()
                .map(address -> {
                    val hash = DigestUtils.sha512(address);
                    val obfuscated = emailDomainPattern.matcher(address).replaceAll("****@****");
                    return Pair.of(hash, new CandidateRecipientAddress(TokenSharingStrategyOptions.EMAIL, hash, address, obfuscated));
                })
                .collect(Collectors.toMap(Pair::getKey, Pair::getValue));

            putEmailRecipients(requestContext, validAddresses);
            LOGGER.debug("Multiple emails found for [{}]: [{}]", principal.getId(), validAddresses);
            eventAttributes.put(FLOW_SCOPE_ATTR_EMAIL_RECIPIENTS, validAddresses);
        }

        val smsRecipients = recipients.get(TokenSharingStrategyOptions.SMS);
        if (smsRecipients != null) {
            val phonePattern = Pattern.compile("\\d{4}$");
            val validPhones = smsRecipients
                .stream()
                .map(address -> {
                    val hash = DigestUtils.sha512(address);
                    val obfuscated = phonePattern.matcher(address).replaceAll("******");
                    return Pair.of(hash, new CandidateRecipientAddress(TokenSharingStrategyOptions.SMS, hash, address, obfuscated));
                })
                .collect(Collectors.toMap(Pair::getKey, Pair::getValue));

            putSmsRecipients(requestContext, validPhones);
            LOGGER.debug("Multiple phone numbers found for [{}]: [{}]", principal.getId(), validPhones);
            eventAttributes.put(FLOW_SCOPE_ATTR_SMS_RECIPIENTS, validPhones);
        }

        WebUtils.putPrincipal(requestContext, principal);
        return eventFactory.event(this, CasWebflowConstants.TRANSITION_ID_SELECT, eventAttributes);
    }
Event attribute to allow registration of email.
support/cas-server-support-simple-mfa-core/src/main/java/org/apereo/cas/mfa/simple/web/flow/CasSimpleMultifactorSendTokenAction.java