/// <summary>
        /// https://github.com/scriban/scriban
        /// </summary>
        /// <param name="registeredClientId"></param>
        /// <param name="customer"></param>
        /// <param name="name"></param>
        /// <param name="language"></param>
        /// <param name="parameters"></param>
        /// <returns></returns>
        public MailTemplateDetail RenderMailContent(string registeredClientId, string customer, string name, string language, object parameters)
        {
            ArgumentCheck.IsNotNullOrEmpty(registeredClientId, nameof(registeredClientId));
            ArgumentCheck.IsNotNullOrEmpty(customer, nameof(customer));
            ArgumentCheck.IsNotNullOrEmpty(name, nameof(name));
            ArgumentCheck.IsNotNullOrEmpty(language, nameof(language));

            if (parameters == null)
            {
                parameters = new object();
            }

            var header = _dataService.GetMailTemplateByName(registeredClientId, customer, name);

            ArgumentCheck.IsTrue(header != null, $"template header not found");

            var template = header.DetailTemplates.FirstOrDefault(o => o.Language.Equals(language, StringComparison.InvariantCultureIgnoreCase));

            ArgumentCheck.IsTrue(template != null, $"template not found");

            var subjectTemplate = Template.Parse(template.Subject);
            var bodyTemplate    = Template.Parse(template.Body);

            return(new MailTemplateDetail
            {
                MailTemplateHeaderId = template.MailTemplateHeaderId,
                MailTemplateDetailId = template.MailTemplateDetailId,
                Language = template.Language,
                IsBodyHtml = template.IsBodyHtml,
                Subject = subjectTemplate.Render(parameters),
                Body = bodyTemplate.Render(parameters)
            });
        }
Пример #2
0
        public User CreateUser(WorkContext workContext, User user)
        {
            ArgumentCheck.IsNotNull(workContext, nameof(workContext));
            ArgumentCheck.IsNotNullOrEmpty(workContext.LoginName, nameof(workContext.LoginName));
            ArgumentCheck.IsNotNull(user, nameof(user));
            ArgumentCheck.IsNotNullOrEmpty(user.RegisteredClientId, nameof(user.RegisteredClientId));
            ArgumentCheck.IsTrue(_dataService.GetRegisteredClient(user.RegisteredClientId) != null, $"referenced client id '{user.RegisteredClientId}' does not exist");
            ArgumentCheck.IsNotNullOrEmpty(user.LoginName, nameof(user.LoginName));
            ArgumentCheck.IsTrue(_dataService.GetUserByLoginName(user.RegisteredClientId, user.LoginName) == null, $"user with login name '{user.LoginName}' already exists for client '{user.RegisteredClientId}'");
            ArgumentCheck.IsNotNullOrEmpty(user.Password, nameof(user.Password));

            user.UserId       = Guid.NewGuid();
            user.CreationDate = DateTime.Now;
            user.CreationUser = workContext.LoginName;
            user.UpdateDate   = null;
            user.UpdateUser   = null;

            _dataService.CreateUser(user);

            return(user);
        }
        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));
            }
        }