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)); } }