protected abstract void SendMailInternal(MailRequest mailRequest);
 protected abstract Task SendMailAsyncInternal(MailRequest mailRequest);
        public virtual async Task SendMailAsync(MailRequest mailRequest)
        {
            Validate(mailRequest);

            await SendMailAsyncInternal(mailRequest);
        }
        private void Validate(MailRequest mailRequest)
        {
            var mailRequestValidator = new MailRequestValidator(mailRequest);

            mailRequestValidator.Validate();
        }
        public virtual void SendMail(MailRequest mailRequest)
        {
            Validate(mailRequest);

            SendMailInternal(mailRequest);
        }