public CreateEmailCommunication ( List |
||
recipientEmails | List |
The recipient emails. |
fromName | string | From name. |
fromAddress | string | From address. |
replyTo | string | The reply to. |
subject | string | The subject. |
htmlMessage | string | The HTML message. |
textMessage | string | The text message. |
bulkCommunication | bool | if set to |
recipientStatus | CommunicationRecipientStatus | The recipient status. |
senderPersonAliasId | int | The sender person alias identifier. |
Результат | Communication |
/// <summary> /// Sends the specified template. /// </summary> /// <param name="template">The template.</param> /// <param name="recipients">The recipients.</param> /// <param name="appRoot">The application root.</param> /// <param name="themeRoot">The theme root.</param> /// <param name="createCommunicationHistory">if set to <c>true</c> [create communication history].</param> public void Send( SystemEmail template, List<RecipientData> recipients, string appRoot, string themeRoot, bool createCommunicationHistory ) { var globalAttributes = GlobalAttributesCache.Read(); string from = template.From; if (string.IsNullOrWhiteSpace(from)) { from = globalAttributes.GetValue( "OrganizationEmail" ); } string fromName = template.FromName; if ( string.IsNullOrWhiteSpace( fromName ) ) { fromName = globalAttributes.GetValue( "OrganizationName" ); } if ( !string.IsNullOrWhiteSpace( from ) ) { // Resolve any possible merge fields in the from address var globalConfigValues = Rock.Web.Cache.GlobalAttributesCache.GetMergeFields( null ); from = from.ResolveMergeFields( globalConfigValues ); fromName = fromName.ResolveMergeFields( globalConfigValues ); MailMessage message = new MailMessage(); if (string.IsNullOrWhiteSpace(fromName)) { message.From = new MailAddress( from ); } else { message.From = new MailAddress( from, fromName ); } CheckSafeSender( message, globalAttributes ); if ( !string.IsNullOrWhiteSpace( template.Cc ) ) { foreach ( string ccRecipient in template.Cc.SplitDelimitedValues() ) { message.CC.Add( new MailAddress( ccRecipient ) ); } } if ( !string.IsNullOrWhiteSpace( template.Bcc ) ) { foreach ( string ccRecipient in template.Bcc.SplitDelimitedValues() ) { message.Bcc.Add( new MailAddress( ccRecipient ) ); } } message.IsBodyHtml = true; message.Priority = MailPriority.Normal; using ( var smtpClient = GetSmtpClient() ) { using ( var rockContext = new RockContext() ) { int? senderPersonAliasId = null; if ( createCommunicationHistory ) { var sender = new PersonService( rockContext ) .Queryable().AsNoTracking() .Where( p => p.Email == from ) .FirstOrDefault(); senderPersonAliasId = sender != null ? sender.PrimaryAliasId : (int?)null; } var communicationService = new CommunicationService( rockContext ); foreach ( var recipientData in recipients ) { foreach ( var g in globalConfigValues ) { if ( recipientData.MergeFields.ContainsKey( g.Key ) ) { recipientData.MergeFields[g.Key] = g.Value; } } // Add the recipients from the template List<string> sendTo = SplitRecipient( template.To ); // Add the recipient from merge data ( if it's not null and not already added ) if ( !string.IsNullOrWhiteSpace( recipientData.To ) && !sendTo.Contains( recipientData.To, StringComparer.OrdinalIgnoreCase ) ) { sendTo.Add( recipientData.To ); } foreach ( string to in sendTo ) { message.To.Clear(); message.To.Add( to ); string subject = template.Subject.ResolveMergeFields( recipientData.MergeFields ); string body = Regex.Replace( template.Body.ResolveMergeFields( recipientData.MergeFields ), @"\[\[\s*UnsubscribeOption\s*\]\]", string.Empty ); if ( !string.IsNullOrWhiteSpace( themeRoot ) ) { subject = subject.Replace( "~~/", themeRoot ); body = body.Replace( "~~/", themeRoot ); } if ( !string.IsNullOrWhiteSpace( appRoot ) ) { subject = subject.Replace( "~/", appRoot ); body = body.Replace( "~/", appRoot ); body = body.Replace( @" src=""/", @" src=""" + appRoot ); body = body.Replace( @" href=""/", @" href=""" + appRoot ); } message.Subject = subject; message.Body = body; smtpClient.Send( message ); if ( createCommunicationHistory ) { communicationService.CreateEmailCommunication( new List<string> { to }, fromName, from, from, subject, body, string.Empty, false, CommunicationRecipientStatus.Delivered, senderPersonAliasId ); } } } if ( createCommunicationHistory ) { rockContext.SaveChanges(); } } } } }