protected boolean send(final Principal principal, final Ticket tokenTicket,
                           final RequestContext requestContext, final List<String> recipients) {
        return FunctionUtils.doIf(communicationsManager.isSmsSenderDefined(),
            Unchecked.supplier(() -> {
                val smsProperties = properties.getSms();
                val token = tokenTicket.getId();
                val tokenWithoutPrefix = token.substring(CasSimpleMultifactorAuthenticationTicket.PREFIX.length() + 1);
                val smsText = buildTextMessageBody(smsProperties, token, tokenWithoutPrefix);
                val smsRequest = SmsRequest.builder()
                    .from(smsProperties.getFrom())
                    .principal(principal)
                    .to(recipients)
                    .text(smsText)
                    .build();
                return communicationsManager.sms(smsRequest);
            }), () -> false).get();
    }
This is {@link CasSimpleMultifactorSendSms}.

@author Misagh Moayyed
@since 7.0.0
support/cas-server-support-simple-mfa-core/src/main/java/org/apereo/cas/mfa/simple/web/flow/CasSimpleMultifactorSendSms.java