public MailServiceOperationResponse SendMail(MailServerConfiguration server, MailMessage message)
        {
            ArgumentCheck.IsNotNull(server, $"{nameof(server)} must not be null");
            ArgumentCheck.IsNotNullOrEmpty(server.Hostname, $"{nameof(server.Hostname)} must not be null or empty");
            ArgumentCheck.IsNotNullOrEmpty(server.From, $"{nameof(server.From)} must not be null or empty");

            ArgumentCheck.IsNotNull(message, $"{nameof(message)} must not be null");
            ArgumentCheck.IsNotNull(message.To, $"{nameof(message.To)} must not be null");
            ArgumentCheck.IsTrue(message.To.Count > 0, $"{nameof(message.To)} must contain at least 1 address");
            ArgumentCheck.IsFalse(message.To.Any(o => string.IsNullOrEmpty(o.Address)), $"{nameof(MailAddress.Address)} fields must not be null or empty");
            ArgumentCheck.IsNotNullOrEmpty(message.Body, $"{nameof(message.Body)}");
            ArgumentCheck.IsNotNullOrEmpty(message.Subject, $"{nameof(message.Subject)}");

            try
            {
                NetMail.MailMessage netMessage = new NetMail.MailMessage();

                // TO ##########################
                if (message.From == null)
                {
                    netMessage.From = new NetMail.MailAddress(message.From.Address);
                }
                else
                {
                    netMessage.From = new NetMail.MailAddress(server.From);
                }

                // TO ##########################
                foreach (var adr in message.To)
                {
                    if (string.IsNullOrEmpty(adr.Address))
                    {
                        continue;
                    }
                    NetMail.MailAddress address = new NetMail.MailAddress(adr.Address);
                    if (!string.IsNullOrEmpty(adr.DisplayName))
                    {
                        address = new NetMail.MailAddress(adr.Address, adr.DisplayName);
                    }
                    netMessage.To.Add(address);
                }

                // CC ##########################
                if (message.CC != null)
                {
                    foreach (var adr in message.CC)
                    {
                        if (string.IsNullOrEmpty(adr.Address))
                        {
                            continue;
                        }
                        NetMail.MailAddress address = new NetMail.MailAddress(adr.Address);
                        if (!string.IsNullOrEmpty(adr.DisplayName))
                        {
                            address = new NetMail.MailAddress(adr.Address, adr.DisplayName);
                        }
                        netMessage.CC.Add(address);
                    }
                }

                // BCC ##########################
                if (message.Bcc != null)
                {
                    foreach (var adr in message.Bcc)
                    {
                        if (string.IsNullOrEmpty(adr.Address))
                        {
                            continue;
                        }
                        NetMail.MailAddress address = new NetMail.MailAddress(adr.Address);
                        if (!string.IsNullOrEmpty(adr.DisplayName))
                        {
                            address = new NetMail.MailAddress(adr.Address, adr.DisplayName);
                        }
                        netMessage.Bcc.Add(address);
                    }
                }

                // ################################
                netMessage.Subject    = message.Subject;
                netMessage.Body       = message.Body;
                netMessage.IsBodyHtml = message.IsBodyHtml;

                // ################################
                using (NetMail.SmtpClient client = CreateClient(server))
                {
                    client.Send(netMessage);
                }
                _logger.Info($"Mail sent: '{message.Subject}' to '{string.Join(';', message.To.Select(o => o.Address).ToList())}'");
                return(MailServiceOperationResponse.CreateSuccess());
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(MailServiceOperationResponse.CreateInternalServerError(e));
            }
        }