protected int SendNotification(MessageTemplate messageTemplate, EmailAccount emailAccount, int languageId, IEnumerable<Token> tokens, string toEmailAddress, string toName) { //retrieve localized message template data var bcc = messageTemplate.GetLocalized((mt) => mt.BccEmailAddresses, languageId); var subject = messageTemplate.GetLocalized((mt) => mt.Subject, languageId); var body = messageTemplate.GetLocalized((mt) => mt.Body, languageId); //Replace subject and body tokens var subjectReplaced = _tokenizer.Replace(subject, tokens, false); var bodyReplaced = _tokenizer.Replace(body, tokens, false); var email = new QueuedEmail() { Priority = QueuedEmailPriority.High, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = toEmailAddress, ToName = toName, CC = string.Empty, Bcc = bcc, Subject = subjectReplaced, Body = bodyReplaced, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id }; _queuedEmailService.InsertQueuedEmail(email); return email.Id; }
public void Can_save_and_load_emailAccount() { var emailAccount = new EmailAccount { Email = "*****@*****.**", DisplayName = "Administrator", Host = "127.0.0.1", Port = 125, Username = "******", Password = "******", EnableSsl = true, UseDefaultCredentials = true }; var fromDb = SaveAndLoadEntity(emailAccount); fromDb.ShouldNotBeNull(); fromDb.Email.ShouldEqual("*****@*****.**"); fromDb.DisplayName.ShouldEqual("Administrator"); fromDb.Host.ShouldEqual("127.0.0.1"); fromDb.Port.ShouldEqual(125); fromDb.Username.ShouldEqual("John"); fromDb.Password.ShouldEqual("111"); fromDb.EnableSsl.ShouldBeTrue(); fromDb.UseDefaultCredentials.ShouldBeTrue(); }
/// <summary> /// Updates an email account /// </summary> /// <param name="emailAccount">Email account</param> public virtual void UpdateEmailAccount(EmailAccount emailAccount) { if (emailAccount == null) throw new ArgumentNullException("emailAccount"); emailAccount.Email = CommonHelper.EnsureNotNull(emailAccount.Email); emailAccount.DisplayName = CommonHelper.EnsureNotNull(emailAccount.DisplayName); emailAccount.Host = CommonHelper.EnsureNotNull(emailAccount.Host); emailAccount.Username = CommonHelper.EnsureNotNull(emailAccount.Username); emailAccount.Password = CommonHelper.EnsureNotNull(emailAccount.Password); emailAccount.Email = emailAccount.Email.Trim(); emailAccount.DisplayName = emailAccount.DisplayName.Trim(); emailAccount.Host = emailAccount.Host.Trim(); emailAccount.Username = emailAccount.Username.Trim(); emailAccount.Password = emailAccount.Password.Trim(); emailAccount.Email = CommonHelper.EnsureMaximumLength(emailAccount.Email, 255); emailAccount.DisplayName = CommonHelper.EnsureMaximumLength(emailAccount.DisplayName, 255); emailAccount.Host = CommonHelper.EnsureMaximumLength(emailAccount.Host, 255); emailAccount.Username = CommonHelper.EnsureMaximumLength(emailAccount.Username, 255); emailAccount.Password = CommonHelper.EnsureMaximumLength(emailAccount.Password, 255); _emailAccountRepository.Update(emailAccount); //event notification _eventPublisher.EntityUpdated(emailAccount); }
/// <summary> /// Sends an email /// </summary> /// <param name="emailAccount">Email account to use</param> /// <param name="subject">Subject</param> /// <param name="body">Body</param> /// <param name="fromAddress">From address</param> /// <param name="fromName">From display name</param> /// <param name="toAddress">To address</param> /// <param name="toName">To display name</param> /// <param name="bcc">BCC addresses list</param> /// <param name="cc">CC addresses ist</param> public void SendEmail(EmailAccount emailAccount, string subject, string body, string fromAddress, string fromName, string toAddress, string toName, IEnumerable<string> bcc = null, IEnumerable<string> cc = null) { SendEmail(emailAccount, subject, body, new MailAddress(fromAddress, fromName), new MailAddress(toAddress, toName), bcc, cc); }
/// <summary> /// Sends an email /// </summary> /// <param name="emailAccount">Email account to use</param> /// <param name="subject">Subject</param> /// <param name="body">Body</param> /// <param name="from">From address</param> /// <param name="to">To address</param> /// <param name="bcc">BCC addresses list</param> /// <param name="cc">CC addresses list</param> /// <param name="attachmentFilePath">Attachment file path</param> /// <param name="attachmentFileName">Attachment file name. If specified, then this file name will be sent to a recipient. Otherwise, "AttachmentFilePath" name will be used.</param> public virtual void SendEmail(EmailAccount emailAccount, string subject, string body, MailAddress from, MailAddress to, IEnumerable<string> bcc = null, IEnumerable<string> cc = null, string attachmentFilePath = null, string attachmentFileName = null) { var message = new MailMessage(); message.From = from; message.To.Add(to); if (bcc != null) { foreach (var address in bcc.Where(bccValue => !String.IsNullOrWhiteSpace(bccValue))) { message.Bcc.Add(address.Trim()); } } if (cc != null) { foreach (var address in cc.Where(ccValue => !String.IsNullOrWhiteSpace(ccValue))) { message.CC.Add(address.Trim()); } } message.Subject = subject; message.Body = body; message.IsBodyHtml = true; //create the file attachment for this e-mail message if (!String.IsNullOrEmpty(attachmentFilePath) && File.Exists(attachmentFilePath)) { var attachment = new Attachment(attachmentFilePath); attachment.ContentDisposition.CreationDate = File.GetCreationTime(attachmentFilePath); attachment.ContentDisposition.ModificationDate = File.GetLastWriteTime(attachmentFilePath); attachment.ContentDisposition.ReadDate = File.GetLastAccessTime(attachmentFilePath); if (!String.IsNullOrEmpty(attachmentFileName)) { attachment.Name = attachmentFileName; } message.Attachments.Add(attachment); } using (var smtpClient = new SmtpClient()) { smtpClient.UseDefaultCredentials = emailAccount.UseDefaultCredentials; smtpClient.Host = emailAccount.Host; smtpClient.Port = emailAccount.Port; smtpClient.EnableSsl = emailAccount.EnableSsl; if (emailAccount.UseDefaultCredentials) smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials; else smtpClient.Credentials = new NetworkCredential(emailAccount.Username, emailAccount.Password); smtpClient.Send(message); } }
/// <summary> /// Deletes an email account /// </summary> /// <param name="emailAccount">Email account</param> public virtual void DeleteEmailAccount(EmailAccount emailAccount) { if (emailAccount == null) throw new ArgumentNullException("emailAccount"); if (GetAllEmailAccounts().Count == 1) throw new NopException("You cannot delete this email account. At least one account is required."); _emailAccountRepository.Delete(emailAccount); //event notification _eventPublisher.EntityDeleted(emailAccount); }
protected virtual int SendNotification(MessageTemplate messageTemplate, EmailAccount emailAccount, int languageId, IEnumerable<Token> tokens, string toEmailAddress, string toName, string attachmentFilePath = null, string attachmentFileName = null, string replyToEmailAddress = null, string replyToName = null) { if (messageTemplate == null) throw new ArgumentNullException("messageTemplate"); if (emailAccount == null) throw new ArgumentNullException("emailAccount"); //retrieve localized message template data var bcc = messageTemplate.GetLocalized(mt => mt.BccEmailAddresses, languageId); var subject = messageTemplate.GetLocalized(mt => mt.Subject, languageId); var body = messageTemplate.GetLocalized(mt => mt.Body, languageId); //Replace subject and body tokens var subjectReplaced = _tokenizer.Replace(subject, tokens, false); var bodyReplaced = _tokenizer.Replace(body, tokens, true); //limit name length toName = CommonHelper.EnsureMaximumLength(toName, 300); var email = new QueuedEmail { Priority = QueuedEmailPriority.High, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = toEmailAddress, ToName = toName, ReplyTo = replyToEmailAddress, ReplyToName = replyToName, CC = string.Empty, Bcc = bcc, Subject = subjectReplaced, Body = bodyReplaced, AttachmentFilePath = attachmentFilePath, AttachmentFileName = attachmentFileName, AttachedDownloadId = messageTemplate.AttachedDownloadId, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id, DontSendBeforeDateUtc = !messageTemplate.DelayBeforeSend.HasValue ? null : (DateTime?)(DateTime.UtcNow + TimeSpan.FromHours(messageTemplate.DelayPeriod.ToHours(messageTemplate.DelayBeforeSend.Value))) }; _queuedEmailService.InsertQueuedEmail(email); return email.Id; }
protected virtual int SendNotification(MessageTemplate messageTemplate, EmailAccount emailAccount, int languageId, IEnumerable<Token> tokens, string toEmailAddress, string toName, string attachmentFilePath = null, string attachmentFileName = null, string replyToEmailAddress = null, string replyToName = null) { //retrieve localized message template data var bcc = messageTemplate.GetLocalized(mt => mt.BccEmailAddresses, languageId); var subject = messageTemplate.GetLocalized(mt => mt.Subject, languageId); var body = messageTemplate.GetLocalized(mt => mt.Body, languageId); //Replace subject and body tokens var subjectReplaced = _tokenizer.Replace(subject, tokens, false); var bodyReplaced = _tokenizer.Replace(body, tokens, true); var email = new QueuedEmail { Priority = 5, From = emailAccount.Email, FromName = emailAccount.DisplayName, To = toEmailAddress, ToName = toName, ReplyTo = replyToEmailAddress, ReplyToName = replyToName, CC = string.Empty, Bcc = bcc, Subject = subjectReplaced, Body = bodyReplaced, AttachmentFilePath = attachmentFilePath, AttachmentFileName = attachmentFileName, AttachedDownloadId = messageTemplate.AttachedDownloadId, CreatedOnUtc = DateTime.UtcNow, EmailAccountId = emailAccount.Id }; _queuedEmailService.InsertQueuedEmail(email); return email.Id; }
/// <summary> /// Sends an email /// </summary> /// <param name="emailAccount">Email account to use</param> /// <param name="subject">Subject</param> /// <param name="body">Body</param> /// <param name="from">From address</param> /// <param name="to">To address</param> /// <param name="bcc">BCC addresses list</param> /// <param name="cc">CC addresses ist</param> public virtual void SendEmail(EmailAccount emailAccount, string subject, string body, MailAddress from, MailAddress to, IEnumerable<string> bcc = null, IEnumerable<string> cc = null) { var message = new MailMessage(); message.From = from; message.To.Add(to); if (null != bcc) { foreach (var address in bcc.Where(bccValue => !String.IsNullOrWhiteSpace(bccValue))) { message.Bcc.Add(address.Trim()); } } if (null != cc) { foreach (var address in cc.Where(ccValue => !String.IsNullOrWhiteSpace(ccValue))) { message.CC.Add(address.Trim()); } } message.Subject = subject; message.Body = body; message.IsBodyHtml = true; using (var smtpClient = new SmtpClient()) { smtpClient.UseDefaultCredentials = emailAccount.UseDefaultCredentials; smtpClient.Host = emailAccount.Host; smtpClient.Port = emailAccount.Port; smtpClient.EnableSsl = emailAccount.EnableSsl; if (emailAccount.UseDefaultCredentials) smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials; else smtpClient.Credentials = new NetworkCredential(emailAccount.Username, emailAccount.Password); smtpClient.Send(message); } }
/// <summary> /// Sends an email /// </summary> /// <param name="emailAccount">Email account to use</param> /// <param name="subject">Subject</param> /// <param name="body">Body</param> /// <param name="fromAddress">From address</param> /// <param name="fromName">From display name</param> /// <param name="toAddress">To address</param> /// <param name="toName">To display name</param> /// <param name="replyTo">ReplyTo address</param> /// <param name="replyToName">ReplyTo display name</param> /// <param name="bcc">BCC addresses list</param> /// <param name="cc">CC addresses list</param> /// <param name="attachmentFilePath">Attachment file path</param> /// <param name="attachmentFileName">Attachment file name. If specified, then this file name will be sent to a recipient. Otherwise, "AttachmentFilePath" name will be used.</param> /// <param name="attachedDownloadId">Attachment download ID (another attachedment)</param> public virtual void SendEmail(EmailAccount emailAccount, string subject, string body, string fromAddress, string fromName, string toAddress, string toName, string replyTo = null, string replyToName = null, IEnumerable<string> bcc = null, IEnumerable<string> cc = null, string attachmentFilePath = null, string attachmentFileName = null, int attachedDownloadId = 0) { var message = new MailMessage(); //from, to, reply to message.From = new MailAddress(fromAddress, fromName); message.To.Add(new MailAddress(toAddress, toName)); if (!String.IsNullOrEmpty(replyTo)) { message.ReplyToList.Add(new MailAddress(replyTo, replyToName)); } //BCC if (bcc != null) { foreach (var address in bcc.Where(bccValue => !String.IsNullOrWhiteSpace(bccValue))) { message.Bcc.Add(address.Trim()); } } //CC if (cc != null) { foreach (var address in cc.Where(ccValue => !String.IsNullOrWhiteSpace(ccValue))) { message.CC.Add(address.Trim()); } } //content message.Subject = subject; message.Body = body; message.IsBodyHtml = true; //create the file attachment for this e-mail message if (!String.IsNullOrEmpty(attachmentFilePath) && File.Exists(attachmentFilePath)) { var attachment = new Attachment(attachmentFilePath); attachment.ContentDisposition.CreationDate = File.GetCreationTime(attachmentFilePath); attachment.ContentDisposition.ModificationDate = File.GetLastWriteTime(attachmentFilePath); attachment.ContentDisposition.ReadDate = File.GetLastAccessTime(attachmentFilePath); if (!String.IsNullOrEmpty(attachmentFileName)) { attachment.Name = attachmentFileName; } message.Attachments.Add(attachment); } //another attachment? if (attachedDownloadId > 0) { var download = _downloadService.GetDownloadById(attachedDownloadId); if (download != null) { //we do not support URLs as attachments if (!download.UseDownloadUrl) { string fileName = !String.IsNullOrWhiteSpace(download.Filename) ? download.Filename : download.Id.ToString(); fileName += download.Extension; var ms = new MemoryStream(download.DownloadBinary); var attachment = new Attachment(ms, fileName); //string contentType = !String.IsNullOrWhiteSpace(download.ContentType) ? download.ContentType : "application/octet-stream"; //var attachment = new Attachment(ms, fileName, contentType); attachment.ContentDisposition.CreationDate = DateTime.UtcNow; attachment.ContentDisposition.ModificationDate = DateTime.UtcNow; attachment.ContentDisposition.ReadDate = DateTime.UtcNow; message.Attachments.Add(attachment); } } } //send email using (var smtpClient = new SmtpClient()) { smtpClient.UseDefaultCredentials = emailAccount.UseDefaultCredentials; smtpClient.Host = emailAccount.Host; smtpClient.Port = emailAccount.Port; smtpClient.EnableSsl = emailAccount.EnableSsl; if (emailAccount.UseDefaultCredentials) smtpClient.Credentials = CredentialCache.DefaultNetworkCredentials; else smtpClient.Credentials = new NetworkCredential(emailAccount.Username, emailAccount.Password); smtpClient.Send(message); } }
/// <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"); string subject = campaign.Subject; string body = campaign.Body; var from = new MailAddress(emailAccount.Email, emailAccount.DisplayName); var to = new MailAddress(email); _emailSender.SendEmail(emailAccount, subject, body, from, to); }
/// <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"); int totalEmailsSent = 0; foreach (var subscription in subscriptions) { var tokens = new List<Token>(); _messageTokenProvider.AddStoreTokens(tokens); _messageTokenProvider.AddNewsLetterSubscriptionTokens(tokens, subscription); 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 virtual void AddStoreTokens(IList<Token> tokens, Store store, EmailAccount emailAccount) { if (emailAccount == null) throw new ArgumentNullException("emailAccount"); tokens.Add(new Token("Store.Name", store.GetLocalized(x => x.Name))); tokens.Add(new Token("Store.URL", store.Url, true)); tokens.Add(new Token("Store.Email", emailAccount.Email)); tokens.Add(new Token("Store.CompanyName", store.CompanyName)); tokens.Add(new Token("Store.CompanyAddress", store.CompanyAddress)); tokens.Add(new Token("Store.CompanyPhoneNumber", store.CompanyPhoneNumber)); tokens.Add(new Token("Store.CompanyVat", store.CompanyVat)); tokens.Add(new Token("Twitter.URL", _storeInformationSettings.TwitterLink)); tokens.Add(new Token("Facebook.URL", _storeInformationSettings.FacebookLink)); tokens.Add(new Token("YouTube.URL", _storeInformationSettings.YoutubeLink)); tokens.Add(new Token("GooglePlus.URL", _storeInformationSettings.GooglePlusLink)); //event notification _eventPublisher.EntityTokensAdded(store, tokens); }
public static EmailAccount ToEntity(this EmailAccountModel model, EmailAccount destination) { return Mapper.Map(model, destination); }
public virtual void AddStoreTokens(IList<Token> tokens, Store store, EmailAccount emailAccount) { if (emailAccount == null) throw new ArgumentNullException("emailAccount"); tokens.Add(new Token("Store.Name", store.GetLocalized(x => x.Name))); tokens.Add(new Token("Store.URL", store.Url, true)); tokens.Add(new Token("Store.Email", emailAccount.Email)); tokens.Add(new Token("Store.CompanyName", store.CompanyName)); tokens.Add(new Token("Store.CompanyAddress", store.CompanyAddress)); tokens.Add(new Token("Store.CompanyPhoneNumber", store.CompanyPhoneNumber)); tokens.Add(new Token("Store.CompanyVat", store.CompanyVat)); //event notification _eventPublisher.EntityTokensAdded(store, tokens); }
/// <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); 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 from = new MailAddress(emailAccount.Email, emailAccount.DisplayName); var to = new MailAddress(email); _emailSender.SendEmail(emailAccount, subject, body, from, to); }
/// <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"); int totalEmailsSent = 0; foreach (var subscription in subscriptions) { var customer = _customerService.GetCustomerByEmail(subscription.Email); //ignore deleted or inactive customers when sending newsletter campaigns if (customer != null && (!customer.Active || customer.Deleted)) continue; var tokens = new List<Token>(); _messageTokenProvider.AddStoreTokens(tokens, _storeContext.CurrentStore, emailAccount); _messageTokenProvider.AddNewsLetterSubscriptionTokens(tokens, subscription); 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 = QueuedEmailPriority.Low, 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; }