public RegistrationResponse RegisterMail(RegisterMailRequest request) { try { var dbRequest = new MailRegistrationDb { Guid = Guid.NewGuid(), Name = request.Name == null?"":request.Name, Host = request.Host, APIKey = request.APIKey, UserName = request.UserName, Password = request.Password, Port = request.Port, IsSSLEnabled = true, MailProviderID = request.MailProviderID, VMTA = request.VMTA, MailChimpListID = request.MailChimpListID, SenderDomain = request.SenderDomain, ImageDomain = request.ImageDomain }; unitOfWork.MailRegistrationsRepository.Add(dbRequest); unitOfWork.Commit(); return(new RegistrationResponse { Token = dbRequest.Guid }); } catch (Exception ex) { Logger.Current.Error("Exception occurred while fetching the campaign templates.", ex); return(null); } }
public bool SubmitWithTimeOut_testing(MailRegistrationDb mailRegistration, Message message, int campaignId, string subject) // created this method for testing PMTA emails by ram on 11th may 2018 for NEXG-3007 NEXG-3004 { bool connectionStatus = false; var connection = new Connection(mailRegistration.Host, mailRegistration.Port ?? 25, mailRegistration.UserName, mailRegistration.Password); try { var tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token; int timeOut = 10000; var task = Task.Factory.StartNew(() => connection.Submit(message), token); if (!task.Wait(timeOut, token)) { string errorMessage = "Sending a campaign with subject : " + subject + " and campaignId : " + campaignId + " through VMTA has timed out"; TimeoutException ex = new TimeoutException(errorMessage); Logger.Current.Critical(errorMessage, ex); throw ex; } connectionStatus = true; Logger.Current.Informational("Campaign send successfully through VMTA"); } catch (Exception ex) { Logger.Current.Critical("PMTA Connection failed for Job Id : " + message.JobID + " Error Message : ", ex); connectionStatus = false; connection.Close(); } finally { connection.Close(); } return(connectionStatus); }
public MailRegistrationDb GetMailChimpDetails(IEnumerable <Guid> tokens) { Logger.Current.Verbose("Request received for fetching VMTA details : "); MailRegistrationDb registration = this.unitOfWork.MailRegistrationsRepository.FirstOrDefault(mr => tokens.Contains(mr.Guid) && mr.MailProviderID == MailProvider.MailChimp); return(registration); }
private string ProcessEmailContent(Campaign campaign, MailRegistrationDb mailRegistration, ServiceProviderViewModel serviceProvider) { string content; var imageHostingUrl = _jobConfig.ImageHostingServiceUrl; var accountDomain = serviceProvider.Account.DomainURL.ToLower(); if (!string.IsNullOrEmpty(serviceProvider.ImageDomain?.Domain)) { mailRegistration.ImageDomain = serviceProvider.ImageDomain.Domain; content = campaign.HTMLContent.Replace(imageHostingUrl, serviceProvider.ImageDomain.Domain); var imageDomainProtocol = serviceProvider.ImageDomain.Domain.Substring(0, serviceProvider.ImageDomain.Domain.IndexOf("://") + 3); var index = serviceProvider.ImageDomain.Domain.IndexOf("//"); var dotCount = serviceProvider.ImageDomain.Domain.Count(d => d == '.'); var linkDomain = serviceProvider.ImageDomain.Domain; if (index >= 0 && dotCount == 1) { linkDomain = serviceProvider.ImageDomain.Domain.Replace(imageDomainProtocol, imageDomainProtocol + serviceProvider.AccountCode + "."); content = content.Replace("http://" + accountDomain, linkDomain).Replace("https://" + accountDomain, linkDomain); } } else { content = campaign.HTMLContent; } return(content.Replace("*|CAMPID|*", campaign.Id.ToString()).Replace("<o:p>", "").Replace("</o:p>", "")); }
public MailRegistrationDb GetMailRegistrationDetails(Guid token) { Logger.Current.Verbose("Request received for fetching mail registration details with token :" + token); MailRegistrationDb registration = this.unitOfWork.MailRegistrationsRepository.FirstOrDefault(ft => ft.Guid == token); return(registration); }
public SmtpMailService(MailRegistrationDb registration) { smtpClient = new SmtpClient(registration.Host); smtpClient.Credentials = new NetworkCredential(registration.UserName, registration.Password); if (registration.Port.HasValue) { smtpClient.Port = registration.Port.Value; } smtpClient.EnableSsl = registration.IsSSLEnabled; provider = MailProvider.Smtp; this.registration = registration; }
private bool EmailSend(string subject, string emailBody, string toEmail, int accountId, int userId) { Logger.Current.Informational("In Email Send Method: " + toEmail); var success = false; var mailService = new MailService(); ServiceProviderViewModel serviceProviderViewModel = communicationService.GetAccountServiceProviders(new GetServiceProviderRequest() { CommunicationTypeId = CommunicationType.Mail, AccountId = accountId, MailType = MailType.TransactionalEmail }).ServiceProviderViewModel.FirstOrDefault(); MailRegistrationDb mailRegistration = mailService.GetMailRegistrationDetails(serviceProviderViewModel.LoginToken); LandmarkIT.Enterprise.CommunicationManager.Requests.SendMailRequest sendMailRequest = new LandmarkIT.Enterprise.CommunicationManager.Requests.SendMailRequest(); var senderEmail = serviceProviderRepository.GetServiceProviderEmail(serviceProviderViewModel.CommunicationLogID); sendMailRequest.TokenGuid = mailRegistration.Guid; sendMailRequest.RequestGuid = Guid.NewGuid(); sendMailRequest.IsBodyHtml = true; sendMailRequest.From = senderEmail.EmailId; sendMailRequest.Subject = subject; sendMailRequest.ScheduledTime = DateTime.Now.ToUniversalTime().AddSeconds(5); sendMailRequest.Body = emailBody; sendMailRequest.DisplayName = mailRegistration.Name; sendMailRequest.To = new List <string>() { toEmail }; sendMailRequest.CategoryID = (short)EmailNotificationsCategory.InvalidCouponReport; sendMailRequest.AccountID = accountId; try { mailService.Send(sendMailRequest); success = true; } catch (Exception ex) { ex.Data.Clear(); ex.Data.Add("AccountId", accountId); ex.Data.Add("UserID", userId); ex.Data.Add("TO Email", toEmail); Logger.Current.Error("Error while sending email through transaction provider ", ex); success = false; } return(success); }
private IMailProvider GetEmailProvider(MailRegistrationDb mailRegistration) { switch (mailRegistration.MailProviderID) { case LM.MailProvider.MailChimp: return(new MailChimpCampaign(mailRegistration.APIKey)); case LM.MailProvider.SmartTouch: return(new SmartTouchProvider()); case LM.MailProvider.Undefined: case LM.MailProvider.Smtp: case LM.MailProvider.SendGrid: case LM.MailProvider.CustomSmartTouch: case LM.MailProvider.CustomMailChimp: default: break; } return(null); }
public SmtpMailService(IUnitOfWork unitOfWork, Guid token, short parallelLoad = 10) { Logger.Current.Verbose("Request received for sending an email through smtp-mailservice"); this.unitOfWork = unitOfWork; this.parallelLoad = parallelLoad; registration = this.unitOfWork.MailRegistrationsRepository.Single(mr => mr.Guid == token); if (registration != null && registration.Port.HasValue) { smtpClient = new SmtpClient(registration.Host, registration.Port.Value); } else { smtpClient = new SmtpClient(registration.Host); } smtpClient.Credentials = new NetworkCredential(registration.UserName, registration.Password); if (registration.Port.HasValue) { smtpClient.Port = registration.Port.Value; } smtpClient.EnableSsl = registration.IsSSLEnabled; }
public VmtaMailService(IUnitOfWork unitOfWork, Guid token) { Logger.Current.Verbose("Request received for sending an email through vmta-mailservice"); this.unitOfWork = unitOfWork; registration = this.unitOfWork.MailRegistrationsRepository.Single(mr => mr.Guid == token); }
public string SendCampaign(Campaign campaign, List <EmailRecipient> emails, IEnumerable <FieldValueOption> customFieldsValueOptions , string accountCode, string accountAddress, string accountDomain , string providerEmail, MailRegistrationDb mailRegistration) { Connection connection = null; try { connection = new Connection( mailRegistration.Host, mailRegistration.Port ?? 25, mailRegistration.UserName, mailRegistration.Password); /* * HtmlEncode method encodes any special characters into their relavent html codes. * */ campaign.HTMLContent = campaign.HTMLContent; //.FormatHTML(); var message = BuildMessage(campaign, accountDomain, accountCode, accountAddress, providerEmail, mailRegistration); for (var i = 0; i < emails.Count; i++) { var item = emails[i]; var recipient = new Recipient(item.EmailId); recipient["*from"] = string.Format("{0}-{1}_{2}@bounce.{3}", item.CampaignRecipientID, accountCode, campaign.Id, mailRegistration.SenderDomain); recipient["*envid"] = item.CampaignRecipientID.ToString(); recipient["*parts"] = "1"; foreach (var mergeField in item.ContactFields) { recipient[mergeField.Key] = mergeField.Value; // var key = mergeField.Key; //// int fid = 0; // var value = mergeField.Value; // if (key.Contains("CF")) // { // //int.TryParse(key.Replace("CF", ""), out fid); // //var SelectedValues = value.ToIntList(); // //var customfieldoptions = // // customFieldsValueOptions.Where(cf => cf.FieldId == fid && SelectedValues.Contains(cf.Id)) // // .Select(x => x.Value); // //string replacablecode = string.Join(",", customfieldoptions); // value = (string.IsNullOrEmpty(value) ? key : value); // recipient[mergeField.Key] = value; // } // else // { // } } message.AddRecipient(recipient); } SubmitWithTimeOut(connection, message, campaign.Id, campaign.Subject); } finally { connection?.Close(); } return(string.Empty); }
private Message BuildMessage(Campaign campaign, string accountDomain , string accountCode, string accountAddress , string providerEmail, MailRegistrationDb mailRegistration) { var addressLine = "<p style='margin-bottom:2px;margin-top:2px;'> " + accountAddress + "</p>"; var contentType = campaign.CampaignTypeId == 132 ? "text/plain" : "text/html"; String innerBoundary = campaign.IncludePlainText == true ? "--=_innerBoundary" : ""; var returnPath = string.Format(providerEmail); var message = new Message(returnPath) { Verp = true, VirtualMTA = mailRegistration.VMTA, JobID = string.Format("{0}/{1}", accountCode, campaign.Id) }; message.AddDateHeader(); message.ReturnType = ReturnType.Headers; var discliamarAccounts = ConfigurationManager.AppSettings["EXCLUDING_DISCLIAMAR_ACCOUNTS"].ToString(); Logger.Current.Informational("Campaign send successfully through VMTA AccountID" + campaign.AccountID); bool accountFound = discliamarAccounts.Contains(campaign.AccountID.ToString()); var index = mailRegistration.ImageDomain.IndexOf("//"); var dotCount = mailRegistration.ImageDomain.Count(d => d == '.'); var linkDomain = accountDomain; if (index >= 0 && dotCount == 1) { linkDomain = mailRegistration.ImageDomain.Insert(index + 2, accountCode + "."); } var unsubscribeLink = string.Format(linkDomain.IndexOf("http") >= 0 ? "{0}/campaignUnsubscribe?crid=[CRID]&acct={1}" : "https://{0}/campaignUnsubscribe?crid=[CRID]&acct={1}", linkDomain, campaign.AccountID); var headers = BuildMergeHeader(campaign, accountCode, mailRegistration.SenderDomain, returnPath, unsubscribeLink, providerEmail, innerBoundary); if (string.Equals(ConfigurationManager.AppSettings["INCLUDE_VMTA_ENVID"], "YES", StringComparison.OrdinalIgnoreCase)) { message.EnvID = campaign.Id.ToString(); } message.AddMergeData(headers); var regex = new Regex(@"\*\|\w+\|\*", RegexOptions.IgnoreCase | RegexOptions.Singleline); var matches = regex.Matches(campaign.HTMLContent); var mergeFields = new List <string>(); foreach (Match match in matches) { mergeFields.Add(match.Value.Replace("*|", string.Empty).Replace("|*", string.Empty)); } campaign.HTMLContent = campaign.HTMLContent.Replace("*|", "[").Replace("|*", "]"); if (campaign.CampaignTypeId == 132) { var recipientInfoLine = (campaign.HasDisclaimer.Value == false && accountFound) ? "" : "\r\n\r\n\r\n\r\nThis e-mail was sent to [EMAILID] by " + campaign.SenderName + " " + campaign.From + ". \r\n"; var unsubscribeLine = (campaign.HasDisclaimer.Value == false && accountFound) ? "Click the following link to opt out from mailing list: \r\n" + unsubscribeLink + "\r\n" : "Click the following link to unsubscribe: \r\n" + unsubscribeLink + "\r\n"; if (campaign.HasDisclaimer.Value == false && accountFound) { accountAddress = string.Empty; } var footer = recipientInfoLine + accountAddress + "\r\n" + unsubscribeLine; message.AddMergeData(string.Concat(campaign.HTMLContent, footer)); } else { if (campaign.IncludePlainText == true && !string.IsNullOrEmpty(campaign.PlainTextContent)) { Logger.Current.Verbose("Adding plain text boundary"); var plainTextMergeFields = new List <string>(); var pMatches = regex.Matches(campaign.PlainTextContent); foreach (Match match in pMatches) { plainTextMergeFields.Add(match.Value.Replace("*|", string.Empty).Replace("|*", string.Empty)); } campaign.PlainTextContent = campaign.PlainTextContent.Replace("*|", "[").Replace("|*", "]"); var plainTextContent = "\n\n" + innerBoundary + "\n" + "Content-Disposition: inline;" + "\n" + "Content-Type: text/plain; charset=utf-8" + "\n\n" + campaign.PlainTextContent + "\n"; message.AddMergeData(plainTextContent); } message.AddData("\n\n" + innerBoundary + "\n"); if (campaign.IncludePlainText == true) { message.AddData("Content-Disposition: inline;" + "\n"); message.AddData("Content-Type: text/html; charset=utf-8" + "\n\n"); } var unsubscribeLine = string.Empty; var recipientInfoLine = "<p style='margin-bottom:2px;margin-top:2px;'> This e-mail was sent to " + "[EMAILID] by " + campaign.SenderName + " <" + campaign.From + ">. </p>"; if (campaign.HasDisclaimer.Value == false && accountFound) { unsubscribeLine = " <p style='margin-bottom:2px;margin-top:2px;'> <a href='" + unsubscribeLink + "' style='color: #808080;'>Click here to opt out from mailing list</a></p>"; } else { unsubscribeLine = " <p style='margin-bottom:2px;margin-top:2px;'> <a href='" + unsubscribeLink + "' style='color: #808080;'>Unsubscribe</a></p>"; } var htmlWrapper = "<!DOCTYPE html PUBLIC \" -//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html>\r\n" + "<head>\r\n<meta name=\"robots\" content=\"noindex\">\r\n<meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=utf-8\">\r\n<title></title>\r\n</head>\r\n<body>\r\n " + campaign.HTMLContent + "\r\n</body>\r\n</html>"; var footer = "<div style='color: #808080; font-family: Arial, Verdana, Helvetica; font-size: 8pt; font-weight: bold; width: 80%; text-align: center;margin: auto; '>" + ((campaign.HasDisclaimer.Value == false && accountFound) ? "" : recipientInfoLine) + ((campaign.HasDisclaimer.Value == false && accountFound) ? "" : addressLine) + unsubscribeLine + "</div>"; message.AddMergeData(string.Concat(htmlWrapper, footer)); if (campaign.IncludePlainText == true) { message.AddData("\n\n" + innerBoundary + "--\n\n"); } } return(message); }
public static void Trigger(object stateInfo) { try { if (dailySummaryInprogress) { return; } dailySummaryInprogress = true; Logger.Current.Verbose("WebVisit DailySummary Processor triggered"); string includeToday = System.Configuration.ConfigurationManager.AppSettings["INCLUDE_CURRENT_DAY_IN_DAILY_SUMMARY"].ToLower(); var webAnalyticProviders = accountRepository.GetWebAnalyticsProviders(); var accounts = webAnalyticProviders.Select(a => a.AccountID); var startDate = DateTime.Now.ToUniversalTime().Date.AddDays(-1); var endDate = includeToday == "true" ? DateTime.Now.ToUniversalTime() : DateTime.Now.ToUniversalTime().Date; foreach (var accountId in accounts) { Logger.Current.Informational("Current Account:", accountId.ToString()); var account = accountRepository.GetAccountBasicDetails(accountId); var webAnalyticProvider = webAnalyticProviders.Where(p => p.AccountID == accountId).FirstOrDefault() ?? new WebAnalyticsProvider(); var accountInfo = new AccountBasicInfo() { AccountID = accountId, AccountName = account.AccountName, TimeZone = account.TimeZone, WebAnalyticsID = webAnalyticProvider.Id }; GetDropdownValueResponse lifeCycleStages = dropdownService.GetDropdownValue(new GetDropdownValueRequest() { AccountId = accountInfo.AccountID, DropdownID = (byte)DropdownFieldTypes.LifeCycle }); var emailProviderResponse = communicationService.GetEmailProviders(new GetEmailProvidersRequest() { AccountId = accountInfo.AccountID }); if (emailProviderResponse.Exception != null) { throw emailProviderResponse.Exception; } var communicationResponse = communicationService.GetDefaultCampaignEmailProvider(new GetDefaultCampaignEmailProviderRequest() { AccountId = accountInfo.AccountID }); var serviceProviderGuids = emailProviderResponse.ServiceProviderGuids; MailRegistrationDb mailRegistration = mailService.GetVMTADetails(serviceProviderGuids); var providerDetails = accountService.GetTransactionalProviderDetails(accountInfo.AccountID); string emailContentToAdmins = string.Empty; try { TimeZoneInfo accountTzInfo = TimeZoneInfo.FindSystemTimeZoneById(accountInfo.TimeZone); startDate = TimeZoneInfo.ConvertTimeFromUtc(startDate, accountTzInfo); endDate = includeToday == "true" ? endDate : TimeZoneInfo.ConvertTimeFromUtc(endDate, accountTzInfo); Logger.Current.Informational("StartDate After: " + startDate); Logger.Current.Informational("StartDate After: " + endDate); GetWebVisitDailySummaryResponse response = webAnalyticsService.GetWebVisitDailySummary(new GetWebVisitDailySummaryRequest() { AccountId = accountInfo.AccountID, StartDate = startDate, EndDate = endDate }); GetUsersOptedWebVisitSummaryEmailResponse users = userService.GetUsersOptedWebVisitSummaryEmail(new GetUsersOptedWebVisitSummaryEmailRequest() { AccountId = accountInfo.AccountID }); byte status = accountRepository.GetAccountStatus(accountInfo.AccountID); if (status != (byte)AccountStatus.Suspend) { string emailCopyContent = string.Empty; #region Send Mail To Owner foreach (UserBasicInfo userInfo in users.AllUsers) { Logger.Current.Informational("Sending daily summary email to user: "******". To owner: " + userInfo.Email); try { List <WebVisitReport> relatedVisits = response.WebVisits.Where(c => c.OwnerID == userInfo.UserID).OrderBy(c => c.VisitedOn).ToList(); string emailContent = GetEmailContent(accountInfo, relatedVisits, lifeCycleStages, userInfo.FirstName + " " + userInfo.LastName); if (emailContent.Length > 0) { emailCopyContent = emailCopyContent + emailContent + "<br><hr>"; } if (webAnalyticProvider.DailyStatusEmailOpted && emailContent.Length > 0) { NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailContent); } } catch (Exception ex) { Logger.Current.Error("Error occured while sending web visit daily summary emails for account user: "******" " + userInfo.Email, ex); } } #endregion #region Send Mail To Opted User //add no owner visits to html List <WebVisitReport> unassignedVisits = response.WebVisits.Where(v => ((v.OwnerID.HasValue) ? v.OwnerID.Value == 1 : v.OwnerID == null)).OrderBy(c => c.VisitedOn).ToList(); emailCopyContent += GetEmailContent(accountInfo, unassignedVisits, lifeCycleStages, "Not Assigned"); foreach (UserBasicInfo userInfo in users.UsersOpted) { Logger.Current.Informational("ADMIN - Sending daily summary email to user: "******". To owner: " + userInfo.Email); try { if (emailCopyContent.Length > 0) { NotifyByEmail(accountInfo, "SmartTouch Web Visit Daily Summary", providerDetails, userInfo.Email, emailCopyContent + "<br>"); } } catch (Exception ex) { Logger.Current.Error("Error occured while sending Opted User Daily Web Visit Daily Summary email for user: "******" " + userInfo.Email, ex); } } #endregion } } catch (Exception ex) { Logger.Current.Error("Error occured while sending web visit daily summary emails for account: " + accountInfo, ex); } } dailySummaryInprogress = false; Logger.Current.Informational("Completed processing daily summary emails"); } catch (Exception ex) { dailySummaryInprogress = false; Logger.Current.Error("Error occured while sending web visit daily summary emails", ex); } }
/// <summary> /// Send Campaign through VMTA for test email /// </summary> /// <param name="campaignId"></param> /// <param name="campaignName"></param> /// <param name="contactTagIds"></param> /// <param name="searchDefinitionIds"></param> /// <param name="emails"></param> /// <param name="Companies">Obsolete</param> /// <param name="customFieldsValueOptions"></param> /// <param name="title"></param> /// <param name="subject"></param> /// <param name="content"></param> /// <param name="fromEmail"></param> /// <param name="fromName"></param> /// <param name="accountCode"></param> /// <param name="senderDomain"></param> /// <param name="accountDomain"></param> /// <param name="vmtaEmail"></param> /// <param name="accountAddress"></param> /// <param name="listName"></param> /// <param name="accountId"></param> /// <returns></returns> public IList <int> SendCampaignFromScheduler(int campaignId, string campaignName, List <int> contactTagIds, List <int> searchDefinitionIds, IEnumerable <EmailRecipient> emails , IEnumerable <Company> Companies, IEnumerable <FieldValueOption> customFieldsValueOptions, string title, string subject, string content, string fromEmail , string fromName, string accountCode, string senderDomain, string accountDomain, string vmtaEmail, string accountAddress, int accountId, byte?campaignTypeId, MailRegistrationDb mailRegistration, bool hasDisCliamer, string listName = null) { #region Variables Declaration var count = emails.Count(); string returnPath = string.Empty; EmailRecipient item = null; Message msg = null; IList <int> successfulRecipients = new List <int>(); #endregion var includeVMTAENVId = ConfigurationManager.AppSettings["INCLUDE_VMTA_ENVID"].ToString(); content = content.Replace("*|CAMPID|*", campaignId.ToString()).Replace("<o:p>", "").Replace("</o:p>", "");//.FormatHTML(); var contentType = campaignTypeId == 132 ? "text/plain" : "text/html"; var discliamarAccounts = ConfigurationManager.AppSettings["EXCLUDING_DISCLIAMAR_ACCOUNTS"].ToString(); bool accountFound = discliamarAccounts.Contains(accountId.ToString()); Connection con = new Connection(host, port, userName, password); if (con == null) { return(successfulRecipients); } var addressLine = "<p style='margin-bottom:2px;margin-top:2px;'> " + accountAddress + "</p>"; for (var i = 0; i < count; i++) { item = emails.ToArray()[i]; try { returnPath = item.CampaignRecipientID.ToString() + "-" + accountCode + "_" + campaignId + "@bounce." + senderDomain; msg = new Message(returnPath); if (msg == null) { continue; } msg.AddDateHeader(); msg.ReturnType = ReturnType.Headers; var index = mailRegistration.ImageDomain.IndexOf("//"); var dotCount = mailRegistration.ImageDomain.Count(d => d == '.'); var linkDomain = accountDomain; if (index >= 0 && dotCount == 1) { linkDomain = mailRegistration.ImageDomain.Insert(index + 2, accountCode + "."); } //var unsubscribeLink = "https://" + linkDomain + "/campaignUnsubscribe?crid=" + item.CampaignRecipientID.ToString() + "&acct=" + accountId; var unsubscribeLink = string.Format(linkDomain.IndexOf("http") >= 0 ? "{0}/campaignUnsubscribe?crid=[CRID]&acct={1}" : "https://{0}/campaignUnsubscribe?crid=[CRID]&acct={1}", linkDomain, accountId); String headers = BuildHeader(campaignId, subject, accountCode, item, returnPath, unsubscribeLink, fromName, fromEmail, vmtaEmail, senderDomain, campaignTypeId); if (includeVMTAENVId == "YES") { msg.EnvID = item.CampaignRecipientID.ToString(); } msg.Verp = true; msg.VirtualMTA = vmta; msg.JobID = accountCode + "/" + campaignId; msg.AddData(headers); var contentSb = new StringBuilder(content, content.Length * 2); contentSb.Replace("*|CID|*", item.ContactId.ToString()).Replace("*|CAMPID|*", campaignId.ToString()).Replace("*|CRID|*", item.CampaignRecipientID.ToString()).Replace("<o:p>", "").Replace("</o:p>", ""); var body = contentSb.ToString(); string mergedhtmlcontent = item.ContactFields != null?ReplaceMergeFields(body, item.ContactInfo, customFieldsValueOptions, null, item.ContactFields) : body; var unsubscribeLine = string.Empty; var recipientInfoLine = "<p style='margin-bottom:2px;margin-top:2px;'> This e-mail was sent to " + item.EmailId + " by " + fromName + " <" + fromEmail + ">. </p>"; if (accountFound && !hasDisCliamer) { unsubscribeLine = " <p style='margin-bottom:2px;margin-top:2px;'> <a href='" + unsubscribeLink + "' style='color: #808080;'>Click here to opt out from mailing list</a></p>"; } else { unsubscribeLine = " <p style='margin-bottom:2px;margin-top:2px;'> <a href='" + unsubscribeLink + "' style='color: #808080;'>Unsubscribe</a></p>"; } var htmlWrapper = "<!DOCTYPE html PUBLIC \" -//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\r\n<html>\r\n" + "<head>\r\n" + "<meta name='robots' content='noindex'>\r\n" + "<meta http-equiv=\"Content-Type\" content=\"" + contentType + "; charset=utf-8\">\r\n<title></title>\r\n</head>\r\n<body>\r\n*|CONTENT|*\r\n</body>\r\n</html>"; var footer = "<div style='color: #808080; font-family: Arial, Verdana, Helvetica; font-size: 8pt; font-weight: bold;margin: auto;width: 80%;text-align: center;'>" + ((accountFound && !hasDisCliamer) ? "" : recipientInfoLine) + ((accountFound && !hasDisCliamer) ? "" : addressLine) + unsubscribeLine + "</div>"; mergedhtmlcontent = campaignTypeId == 132 ? body : htmlWrapper.Replace("*|CONTENT|*", mergedhtmlcontent + footer); msg.AddData(mergedhtmlcontent); String textHeaders = headers.Replace("Content-Type: text/html;", "Content-Type: text/plain;"); msg.BeginPart(2); msg.AddData(textHeaders); msg.AddData(mergedhtmlcontent); Recipient recipient = new Recipient(item.EmailId); msg.AddRecipient(recipient); SubmitWithTimeOut(con, msg, campaignId, subject); successfulRecipients.Add(item.CampaignRecipientID); } catch (Exception ex) { Logger.Current.Error("Unable to send campaign to: " + item.EmailId + ". Error:", ex); } } return(successfulRecipients); }
protected override void Execute() { try { var imageHostingUrl = ConfigurationManager.AppSettings["IMAGE_HOSTING_SERVICE_URL"].ToString(); var campaignService = IoC.Container.GetInstance <ICampaignService>(); var communicationService = IoC.Container.GetInstance <ICommunicationService>(); var customFieldRepository = IoC.Container.GetInstance <ICustomFieldRepository>(); var contactRepository = IoC.Container.GetInstance <IContactRepository>(); var accountService = IoC.Container.GetInstance <IAccountService>(); var automationCampaignRecipients = campaignService.GetNextAutomationCampaignRecipients(new GetNextAutomationCampaignRecipientsRequest() { }).AutomationCampaignRecipients; if (automationCampaignRecipients != null && automationCampaignRecipients.Any()) { Logger.Current.Informational("Automation campaign recipients found"); var campaignIds = automationCampaignRecipients.Select(s => s.CampaignID); var campaigns = campaignService.GetAutomationCampaigns(new GetAutomationCampaignRequest() { CampaignIds = campaignIds }).Campaigns; foreach (var campaign in campaigns) { IEnumerable <EmailRecipient> campaignRecipients = new List <EmailRecipient>(); try { Logger.Current.Informational("Request received to get email providers, automation campaign id " + campaign.Id); // var response = communicationService.GetEmailProviders(new GetEmailProvidersRequest() { AccountId = campaign.AccountID }); // if (response.Exception != null) //throw response.Exception; var communicationResponse = (campaign.ServiceProviderID.HasValue && campaign.ServiceProviderID.Value > 0) ? communicationService.GetEmailProviderById(new GetServiceProviderByIdRequest { AccountId = campaign.AccountID, ServiceProviderId = campaign.ServiceProviderID.Value }).CampaignEmailProvider : communicationService.GetDefaultCampaignEmailProvider(new GetDefaultCampaignEmailProviderRequest { AccountId = campaign.AccountID }).CampaignEmailProvider; Logger.Current.Informational("Request received to get default email providers, automation campaign id " + campaign.Id); var accountDomain = communicationResponse.Account.DomainURL; var accountAddress = ""; if (communicationResponse.Account.Addresses != null && communicationResponse.Account.Addresses.Any()) { var primaryAddress = communicationResponse.Account.Addresses.Where(a => a.IsDefault == true).FirstOrDefault(); if (primaryAddress != null) { accountAddress = primaryAddress.ToString(); } } //var serviceProviderGuids = response.ServiceProviderGuids; IEnumerable <Company> companies = default(IEnumerable <Company>); GetServiceProviderSenderEmailResponse providerSenderEmailResponse = campaignService.GetDefaultBulkEmailProvider(new GetServiceProviderSenderEmailRequest() { AccountId = campaign.AccountID, RequestedBy = campaign.CreatedBy }); //var recipients = automationCampaignRecipients.Where(cr => cr.CampaignID == campaign.Id); var recipients = campaignService.GetCampaignRecipientsInfo(new GetCampaignRecipientsRequest { CampaignId = campaign.Id, IsLinkedToWorkflow = true }); if (recipients != null) { campaignRecipients = recipients.RecipientsInfo.Select(c => new EmailRecipient() { ContactId = Convert.ToInt32(c.Value["CONTACTID"]), CampaignRecipientID = Convert.ToInt32(c.Value["CRID"]), EmailId = c.Value["EMAILID"].ToString().TrimEnd(), ContactFields = c.Value }); companies = contactRepository.GetCompanyDetails(campaignRecipients.Select(c => c.ContactId), campaign.AccountID); } var senderName = campaign.SenderName; MailService mailService = new MailService(); MailRegistrationDb mailRegistration = mailService.GetVMTADetails(new List <Guid>() { communicationResponse.LoginToken }); var imageDomainResponse = communicationService.GetServiceProviderImageDomain(new GetServiceProviderImageDomainRequest() { Guid = mailRegistration.Guid }).ServiceProvider; if (imageDomainResponse != null && imageDomainResponse.ImageDomain != null && imageDomainResponse.ImageDomain.Domain != null) { mailRegistration.ImageDomain = imageDomainResponse.ImageDomain.Domain; } var contactTagIds = campaign.ContactTags.Select(c => c.Id).ToList(); var searchDefinidtionIds = campaign.SearchDefinitions.Select(c => c.Id).ToList(); if (mailRegistration != null && mailRegistration.MailProviderID == MailProvider.SmartTouch) { Logger.Current.Informational("VMTA service provider found for this account"); var content = string.Empty; var vmta = new VMTACampaign(mailRegistration.VMTA, mailRegistration.UserName, mailRegistration.Password, mailRegistration.Host, mailRegistration.Port); if (imageHostingUrl != null && mailRegistration.ImageDomain != null) { content = campaign.HTMLContent.Replace(imageHostingUrl, mailRegistration.ImageDomain); var index = mailRegistration.ImageDomain.IndexOf("//"); var dotCount = mailRegistration.ImageDomain.Count(d => d == '.'); var linkDomain = mailRegistration.ImageDomain; if (index >= 0 && dotCount == 1) { linkDomain = mailRegistration.ImageDomain.Insert(index + 2, communicationResponse.AccountCode + ".").Replace("https://", "").Replace("http://", "").Replace("www.", ""); content = content.Replace("http://" + accountDomain, "http://" + linkDomain).Replace("https://" + accountDomain, "http://" + linkDomain); } } else { content = campaign.HTMLContent; } content = content.Replace("*|CAMPID|*", campaign.Id.ToString()).Replace("<o:p>", "").Replace("</o:p>", ""); campaign.HTMLContent = content; if (vmta == null) { continue; } var senderEmail = providerSenderEmailResponse.SenderEmail != null ? providerSenderEmailResponse.SenderEmail.EmailId : ""; IEnumerable <FieldValueOption> customFieldsValueOptions = customFieldRepository.GetCustomFieldsValueOptions(campaign.AccountID); //var successfulRecipients = vmta.SendCampaign(campaign.Id, campaign.Name, contactTagIds, searchDefinidtionIds // , campaignRecipients, companies, customFieldsValueOptions, campaign.Subject, campaign.Subject, content // , campaign.From, senderName, communicationResponse.CampaignEmailProvider.AccountCode // , mailRegistration.SenderDomain, accountDomain, senderEmail, accountAddress,campaign.AccountID,null); var mailProvider = new SmartTouchProvider(); mailProvider.SendCampaign(campaign, campaignRecipients.ToList() , customFieldsValueOptions, communicationResponse.AccountCode, accountAddress, accountDomain , senderEmail, mailRegistration); var successfulRecipients = campaignRecipients; Logger.Current.Informational("Automation campaign sent to vmta, automation campaign id " + campaign.Id); if (successfulRecipients != null && successfulRecipients.Any()) { campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Sent, SentDateTime = DateTime.Now.ToUniversalTime(), ServiceProviderID = communicationResponse.CommunicationLogID, Remarks = "Campaign sent successfully", SentCount = campaignRecipients.Count(), RecipientIds = campaignRecipients.Select(c => c.CampaignRecipientID), ServiceProviderCampaignId = communicationResponse.AccountCode + "/" + campaign.Id, IsRelatedToWorkFlow = true, AccountId = campaign.AccountID }); accountService.ScheduleAnalyticsRefresh(campaign.Id, (byte)IndexType.Campaigns); } else { campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Failure, SentDateTime = DateTime.Now.ToUniversalTime(), Remarks = "Could not send the campaign through VMTA service.", SentCount = campaignRecipients.Count(), RecipientIds = campaignRecipients.Select(c => c.CampaignRecipientID), IsRelatedToWorkFlow = true, AccountId = campaign.AccountID }); } } } catch (Exception ex) { Logger.Current.Error("Exception occurred while sending a campaign:" + campaign.Id, ex); campaignService.UpdateCampaignTriggerStatus(new UpdateCampaignTriggerStatusRequest(campaign.Id) { Status = CampaignStatus.Failure, SentDateTime = DateTime.Now.ToUniversalTime(), Remarks = ex.InnerException != null && ex.InnerException.Message != null ? ex.InnerException.Message.ToString() : ex.Message.ToString(), RecipientIds = campaignRecipients.Select(c => c.CampaignRecipientID), IsRelatedToWorkFlow = true, AccountId = campaign.AccountID }); ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY); continue; } } } } catch (Exception ex) { ExceptionHandler.Current.HandleException(ex, DefaultExceptionPolicies.LOG_ONLY_POLICY); } }
public static RegisterMailRequest ToSmtpMailRegistrationRequest(this MailRegistrationDb mailRegistraion) { throw new NotImplementedException(); }