public async Task <SubscribeNewsletterResultModel> Handle(SubscribeNewsletterCommand request, CancellationToken cancellationToken) { var model = new SubscribeNewsletterResultModel(); var email = request.Email; if (!CommonHelper.IsValidEmail(email)) { model.Result = _translationService.GetResource("Newsletter.Email.Wrong"); } else { email = email.Trim(); var subscription = await _newsLetterSubscriptionService.GetNewsLetterSubscriptionByEmailAndStoreId(email, _workContext.CurrentStore.Id); if (subscription != null) { if (request.Subscribe) { if (!subscription.Active) { await _messageProviderService.SendNewsLetterSubscriptionActivationMessage(subscription, _workContext.WorkingLanguage.Id); } model.Result = _translationService.GetResource("Newsletter.SubscribeEmailSent"); } else { if (subscription.Active) { await _messageProviderService.SendNewsLetterSubscriptionDeactivationMessage(subscription, _workContext.WorkingLanguage.Id); } model.Result = _translationService.GetResource("Newsletter.UnsubscribeEmailSent"); } } else if (request.Subscribe) { subscription = new NewsLetterSubscription { NewsLetterSubscriptionGuid = Guid.NewGuid(), Email = email, CustomerId = _workContext.CurrentCustomer.Id, Active = false, StoreId = _workContext.CurrentStore.Id, CreatedOnUtc = DateTime.UtcNow }; await _newsLetterSubscriptionService.InsertNewsLetterSubscription(subscription); await _messageProviderService.SendNewsLetterSubscriptionActivationMessage(subscription, _workContext.WorkingLanguage.Id); model.Result = _translationService.GetResource("Newsletter.SubscribeEmailSent"); var modelCategory = await PrepareNewsletterCategory(subscription.Id); if (modelCategory.NewsletterCategories.Count > 0) { model.NewsletterCategory = modelCategory; } } else { model.Result = _translationService.GetResource("Newsletter.UnsubscribeEmailSent"); } model.Success = true; } return(model); }