Ejemplo n.º 1
0
        private void QueueEmailMessage(string templateName, EmailMessage.UserInfo user, object model = null)
        {
            var message = LoadAndProcessTemplate(templateName, model);

            if (message == null)
            {
                _logger.LogError <EmailTemplate>(null, $"Failure sending email. Unable to load template '{templateName}'");
                return;
            }
            message.Tos.Add(new EmailMessage.UserInfo(user.Name, user.Email));
            _emailService.Queue(message);
        }
Ejemplo n.º 2
0
 public void SendEmail(string templateName, EmailMessage.UserInfo userInfo, object model, bool sendToUser = true, bool sendEmailToAdmin = false)
 {
     if (sendToUser)
     {
         QueueEmailMessage(templateName, userInfo, model);
     }
     if (sendEmailToAdmin)
     {
         if (templateName.EndsWith(EmailTemplateNames.AdminSuffix))
         {
             QueueEmailMessageToAdmin(templateName, model);
         }
         else
         {
             QueueEmailMessageToAdmin(templateName + EmailTemplateNames.AdminSuffix, model);
         }
     }
 }
Ejemplo n.º 3
0
        public void Capture(string eventName, object[] eventData = null)
        {
            if (eventData == null)
            {
                return;
            }
            switch (eventName)
            {
            case nameof(NamedEvent.UserRegistered):
                if (_emailSenderSettings.UserRegisteredEmailEnabled ||
                    _emailSenderSettings.UserRegisteredEmailToAdminEnabled)
                {
                    var user      = (User)eventData[0];
                    var userInfo  = user.ToUserInfo();
                    var userModel = _userModelFactory.Create(user);
                    var model     = R.With("user", userModel);

                    _emailSender.SendEmail(EmailTemplateNames.UserRegisteredMessage, userInfo, model.Result,
                                           _emailSenderSettings.UserRegisteredEmailEnabled, _emailSenderSettings.UserRegisteredEmailToAdminEnabled);

                    if (_userSettings.UserRegistrationDefaultMode == RegistrationMode.WithActivationEmail)
                    {
                        var activationLink = eventData[1].ToString();
                        model.With("activationLink", activationLink);
                        _emailSender.SendEmail(EmailTemplateNames.UserActivationLinkMessage, userInfo, model.Result);
                    }
                }
                break;

            case nameof(NamedEvent.UserActivated):
                if (_emailSenderSettings.UserActivationEmailEnabled)
                {
                    var user      = (User)eventData[0];
                    var userInfo  = user.ToUserInfo();
                    var userModel = _userModelFactory.Create(user);
                    var model     = R.With("user", userModel);
                    _emailSender.SendEmail(EmailTemplateNames.UserActivatedMessage, userInfo, model);
                }
                break;

            case nameof(NamedEvent.OrderPlaced):
                if (_emailSenderSettings.OrderPlacedEmailEnabled || _emailSenderSettings.OrderPlacedEmailToAdminEnabled)
                {
                    var user       = (User)eventData[0];
                    var userInfo   = user.ToUserInfo();
                    var order      = (Order)eventData[1];
                    var userModel  = _userModelFactory.Create(user);
                    var orderModel = _orderModelFactory.Create(order);
                    var model      = R.With("user", userModel).With("order", orderModel).Result;

                    _emailSender.SendEmail(EmailTemplateNames.OrderPlacedMessage, userInfo, model,
                                           _emailSenderSettings.OrderPlacedEmailEnabled,
                                           _emailSenderSettings.OrderPlacedEmailToAdminEnabled);
                }
                break;

            case nameof(NamedEvent.OrderPaid):
                if (_emailSenderSettings.OrderPaidEmailEnabled || _emailSenderSettings.OrderPaidEmailToAdminEnabled)
                {
                    var user       = (User)eventData[0];
                    var userInfo   = user.ToUserInfo();
                    var order      = (Order)eventData[1];
                    var userModel  = _userModelFactory.Create(user);
                    var orderModel = _orderModelFactory.Create(order);
                    var model      = R.With("user", userModel).With("order", orderModel).Result;

                    _emailSender.SendEmail(EmailTemplateNames.OrderPaidMessage, userInfo, model,
                                           _emailSenderSettings.OrderPaidEmailEnabled,
                                           _emailSenderSettings.OrderPaidEmailToAdminEnabled);
                }
                break;

            case nameof(NamedEvent.ShipmentShipped):
                if (_emailSenderSettings.ShipmentShippedEmailEnabled)
                {
                    var shipment      = (Shipment)eventData[0];
                    var user          = shipment.User;
                    var userModel     = _userModelFactory.Create(user);
                    var userInfo      = shipment.User.ToUserInfo();
                    var orders        = shipment.ShipmentItems.Select(x => _orderModelFactory.Create(x.OrderItem.Order)).ToList();
                    var shipmentModel = _shipmentModelFactory.Create(shipment);

                    var model = R.With("user", userModel).With("orders", orders).With("shipment", shipmentModel)
                                .Result;
                    _emailSender.SendEmail(EmailTemplateNames.ShipmentShippedMessage, userInfo, model);
                }
                break;

            case nameof(NamedEvent.ShipmentDelivered):
                if (_emailSenderSettings.ShipmentDeliveredEmailEnabled || _emailSenderSettings.ShipmentDeliveredEmailToAdminEnabled)
                {
                    var shipment      = (Shipment)eventData[0];
                    var user          = shipment.User;
                    var userModel     = _userModelFactory.Create(user);
                    var userInfo      = shipment.User.ToUserInfo();
                    var orders        = shipment.ShipmentItems.Select(x => _orderModelFactory.Create(x.OrderItem.Order)).ToList();
                    var shipmentModel = _shipmentModelFactory.Create(shipment);

                    var model = R.With("user", userModel).With("orders", orders).With("shipment", shipmentModel)
                                .Result;
                    _emailSender.SendEmail(EmailTemplateNames.ShipmentDeliveredMessage, userInfo, model,
                                           _emailSenderSettings.ShipmentDeliveredEmailEnabled,
                                           _emailSenderSettings.ShipmentDeliveredEmailToAdminEnabled);
                }
                break;

            case nameof(NamedEvent.ShipmentDeliveryFailed):
                if (_emailSenderSettings.ShipmentDeliveryFailedEmailEnabled || _emailSenderSettings.ShipmentDeliveryFailedToAdminEmailEnabled)
                {
                    var shipment      = (Shipment)eventData[0];
                    var user          = shipment.User;
                    var userModel     = _userModelFactory.Create(user);
                    var userInfo      = shipment.User.ToUserInfo();
                    var orders        = shipment.ShipmentItems.Select(x => _orderModelFactory.Create(x.OrderItem.Order)).ToList();
                    var shipmentModel = _shipmentModelFactory.Create(shipment);

                    var model = R.With("user", userModel).With("orders", orders).With("shipment", shipmentModel)
                                .Result;
                    _emailSender.SendEmail(EmailTemplateNames.ShipmentDeliveredMessage, userInfo, model,
                                           _emailSenderSettings.ShipmentDeliveryFailedEmailEnabled,
                                           _emailSenderSettings.ShipmentDeliveryFailedToAdminEmailEnabled);
                }
                break;

            case nameof(NamedEvent.PasswordResetRequested):
            {
                var user      = (User)eventData[0];
                var userInfo  = user.ToUserInfo();
                var userModel = _userModelFactory.Create(user);
                var resetLink = eventData[1];
                var model     = R.With("user", userModel).With("passwordResetLink", resetLink).Result;
                _emailSender.SendEmail(EmailTemplateNames.PasswordRecoveryLinkMessage, userInfo, model);
            }
            break;

            case nameof(NamedEvent.PasswordReset):
                if (_emailSenderSettings.PasswordChangedEmailEnabled)
                {
                    var user      = (User)eventData[0];
                    var userInfo  = user.ToUserInfo();
                    var userModel = _userModelFactory.Create(user);
                    var model     = R.With("user", userModel).Result;
                    _emailSender.SendEmail(EmailTemplateNames.PasswordChangedMessage, userInfo, model);
                }
                break;

            case nameof(NamedEvent.InvitationRequested):
            {
                var email    = eventData[0].ToString();
                var userInfo = new EmailMessage.UserInfo("", email);
                var model    = R.With("email", email).Result;
                _emailSender.SendEmail(EmailTemplateNames.InvitationRequestedMessage, userInfo, model,
                                       _emailSenderSettings.InviteRequestCreatedEmailEnabled,
                                       _emailSenderSettings.InviteRequestCreatedEmailToAdminEnabled);
            }
            break;

            case nameof(NamedEvent.Invitation):
            {
                var userCode       = (UserCode)eventData[0];
                var invitationLink = eventData[1].ToString();
                var userInfo       = new EmailMessage.UserInfo("", userCode.Email);
                var hours          = _securitySettings.InviteLinkExpirationHours;
                var model          = R.With("invitationLink", invitationLink).With("email", userCode.Email).With("expirationHours", hours).Result;
                _emailSender.SendEmail(EmailTemplateNames.InvitationMessage, userInfo, model);
            }
            break;

            case nameof(NamedEvent.ReturnRequestCreated):
            {
                var user      = (User)eventData[0];
                var order     = (Order)eventData[1];
                var listItems = ((List <ReturnRequest>)eventData[2]).Select(x => _returnRequestModelFactory.Create(x)).ToList();
                var userInfo  = user.ToUserInfo();
                var userModel = _userModelFactory.Create(user);

                var model = R.With("user", userModel).With("order", order).With("returnRequests", listItems).Result;
                _emailSender.SendEmail(EmailTemplateNames.ReturnRequestCreatedMessage, userInfo, model,
                                       _emailSenderSettings.ReturnRequestCreatedEmailEnabled,
                                       _emailSenderSettings.ReturnRequestCreatedToAdminEmailEnabled);
            }
            break;

            case nameof(NamedEvent.VendorRegistered):
            case nameof(NamedEvent.VendorActivated):
            case nameof(NamedEvent.VendorRejected):
            case nameof(NamedEvent.VendorDeactivated):
                if (_emailSenderSettings.VendorRegisteredEmailEnabled ||
                    _emailSenderSettings.VendorRegisteredEmailToAdminEnabled ||
                    _emailSenderSettings.VendorActivatedEmailEnabled ||
                    _emailSenderSettings.VendorDeactivatedEmailEnabled ||
                    _emailSenderSettings.VendorRejectedEmailEnabled)
                {
                    var user      = (User)eventData[0];
                    var userInfo  = user.ToUserInfo();
                    var userModel = _userModelFactory.Create(user);
                    var model     = R.With("user", userModel);

                    var vendor = (Vendor)eventData[1];
                    model.With("vendor", vendor);

                    if (eventName == nameof(NamedEvent.VendorRegistered))
                    {
                        _emailSender.SendEmail(EmailTemplateNames.VendorRegisteredMessage, userInfo, model.Result,
                                               _emailSenderSettings.VendorRegisteredEmailEnabled,
                                               _emailSenderSettings.VendorRegisteredEmailToAdminEnabled);
                    }
                    else if (eventName == nameof(NamedEvent.VendorActivated))
                    {
                        _emailSender.SendEmail(EmailTemplateNames.VendorActivatedMessage, userInfo, model.Result,
                                               _emailSenderSettings.VendorActivatedEmailEnabled);
                    }
                    else if (eventName == nameof(NamedEvent.VendorRejected))
                    {
                        var message = eventData[2]?.ToString();
                        model.With("rejectReason", message);
                        _emailSender.SendEmail(EmailTemplateNames.VendorRejectedMessage, userInfo, model.Result,
                                               _emailSenderSettings.VendorRejectedEmailEnabled);
                    }
                    else if (eventName == nameof(NamedEvent.VendorDeactivated))
                    {
                        var message = eventData[2]?.ToString();
                        model.With("deactivationReason", message);
                        _emailSender.SendEmail(EmailTemplateNames.VendorDeactivatedMessage, userInfo, model.Result,
                                               _emailSenderSettings.VendorDeactivatedEmailEnabled);
                    }
                }
                break;

            case nameof(NamedEvent.ContactUs):
            {
                var contactUsModel = eventData[0];
                var model          = R.With("contact", contactUsModel);
                _emailSender.SendEmail(EmailTemplateNames.ContactUsMessageToAdmin, null, model.Result, false, true);
            }
            break;
            }
        }