/// <summary> /// Deleted a queued email /// </summary> /// <param name="campaign">Campaign</param> public virtual void DeleteCampaign(Campaign campaign) { if (campaign == null) throw new ArgumentNullException("campaign"); _campaignRepository.Delete(campaign); //event notification _eventPublisher.EntityDeleted(campaign); }
public void Can_save_and_load_campaign() { var campaign = new Campaign { Name = "Name 1", Subject = "Subject 1", Body = "Body 1", CreatedOnUtc = new DateTime(2010,01,02) }; var fromDb = SaveAndLoadEntity(campaign); fromDb.ShouldNotBeNull(); fromDb.Name.ShouldEqual("Name 1"); fromDb.Subject.ShouldEqual("Subject 1"); fromDb.Body.ShouldEqual("Body 1"); fromDb.CreatedOnUtc.ShouldEqual(new DateTime(2010, 01, 02)); }
private void PrepareCampaignModel(CampaignModel model, Campaign campaign, bool excludeProperties) { model.AvailableStores = _storeService.GetAllStores().Select(s => s.ToModel()).ToList(); model.AllowedTokens = string.Join(", ", _messageTokenProvider.GetListOfCampaignAllowedTokens()); if (!excludeProperties) { if (campaign != null) model.SelectedStoreIds = _storeMappingService.GetStoresIdsWithAccess(campaign); else model.SelectedStoreIds = new int[0]; } if (campaign != null) { model.CreatedOn = _dateTimeHelper.ConvertToUserTime(campaign.CreatedOnUtc, DateTimeKind.Utc); } }
/// <summary> /// Sends a campaign to specified email /// </summary> /// <param name="campaign">Campaign</param> /// <param name="emailAccount">Email account</param> /// <param name="email">Email</param> public virtual void SendCampaign(Campaign campaign, EmailAccount emailAccount, string email) { if (campaign == null) throw new ArgumentNullException("campaign"); if (emailAccount == null) throw new ArgumentNullException("emailAccount"); var tokens = new List<Token>(); _messageTokenProvider.AddStoreTokens(tokens, _storeContext.CurrentStore); _messageTokenProvider.AddNewsLetterSubscriptionTokens(tokens, new NewsLetterSubscription() { Email = email }); var customer = _customerService.GetCustomerByEmail(email); if (customer != null) _messageTokenProvider.AddCustomerTokens(tokens, customer); string subject = _tokenizer.Replace(campaign.Subject, tokens, false); string body = _tokenizer.Replace(campaign.Body, tokens, true); var to = new EmailAddress(email); var from = new EmailAddress(emailAccount.Email, emailAccount.DisplayName); var msg = new EmailMessage(to, subject, body, from); _emailSender.SendEmail(new SmtpContext(emailAccount), msg); }
/// <summary> /// Sends a campaign to specified emails /// </summary> /// <param name="campaign">Campaign</param> /// <param name="emailAccount">Email account</param> /// <param name="subscriptions">Subscriptions</param> /// <returns>Total emails sent</returns> public virtual int SendCampaign(Campaign campaign, EmailAccount emailAccount, IEnumerable<NewsLetterSubscription> subscriptions) { if (campaign == null) throw new ArgumentNullException("campaign"); if (emailAccount == null) throw new ArgumentNullException("emailAccount"); if (subscriptions == null || subscriptions.Count() <= 0) return 0; int totalEmailsSent = 0; var subscriptionData = subscriptions .Where(x => _storeMappingService.Authorize<Campaign>(campaign, x.StoreId)) .GroupBy(x => x.Email); foreach (var group in subscriptionData) { var subscription = group.First(); // only one email per email address var tokens = new List<Token>(); _messageTokenProvider.AddStoreTokens(tokens, _storeContext.CurrentStore); _messageTokenProvider.AddNewsLetterSubscriptionTokens(tokens, subscription); var customer = _customerService.GetCustomerByEmail(subscription.Email); if (customer != null) _messageTokenProvider.AddCustomerTokens(tokens, customer); string subject = _tokenizer.Replace(campaign.Subject, tokens, false); string body = _tokenizer.Replace(campaign.Body, tokens, true); var email = new QueuedEmail() { Priority = 3, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = subscription.Email, Subject = subject, Body = body, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id }; _queuedEmailService.InsertQueuedEmail(email); totalEmailsSent++; } return totalEmailsSent; }
public static Campaign ToEntity(this CampaignModel model, Campaign destination) { return Mapper.Map(model, destination); }