public static void NotifySubscribers( Forum forum, ForumThread thread, Module module, SiteUser siteUser, SiteSettings siteSettings, ForumConfiguration config, string siteRoot, int pageId, int pageNumber, CultureInfo defaultCulture, SmtpSettings smtpSettings, bool notifyModeratorOnly) { string threadViewUrl; if (ForumConfiguration.CombineUrlParams) { threadViewUrl = siteRoot + "/Forums/Thread.aspx?pageid=" + pageId.ToInvariantString() + "&t=" + thread.ThreadId.ToInvariantString() + "~" + pageNumber.ToInvariantString() + "#post" + thread.PostId.ToInvariantString(); } else { threadViewUrl = siteRoot + "/Forums/Thread.aspx?thread=" + thread.ThreadId.ToInvariantString() + "&mid=" + module.ModuleId.ToInvariantString() + "&pageid=" + pageId.ToInvariantString() + "&ItemID=" + forum.ItemId.ToInvariantString() + "&pagenumber=" + pageNumber.ToInvariantString() + "#post" + thread.PostId.ToInvariantString(); } ForumNotificationInfo notificationInfo = new ForumNotificationInfo(); notificationInfo.ThreadId = thread.ThreadId; notificationInfo.PostId = thread.PostId; notificationInfo.SubjectTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ForumNotificationEmailSubject.config"); if (config.IncludePostBodyInNotification) { string postedBy = string.Empty; if (siteUser != null) { string sigFormat = ResourceHelper.GetResourceString("ForumResources", "PostedByFormat", defaultCulture, true); postedBy = string.Format(CultureInfo.InvariantCulture, sigFormat, siteUser.Name) + "\r\n\r\n"; ; } string bodyWithFullLinks = SiteUtils.ChangeRelativeLinksToFullyQualifiedLinks( siteRoot, thread.PostMessage); List<string> urls = SiteUtils.ExtractUrls(bodyWithFullLinks); notificationInfo.MessageBody = System.Web.HttpUtility.HtmlDecode(SecurityHelper.RemoveMarkup(thread.PostMessage)); if (urls.Count > 0) { notificationInfo.MessageBody += "\r\n" + ResourceHelper.GetResourceString("ForumResources", "PostedLinks", defaultCulture, true); foreach (string s in urls) { notificationInfo.MessageBody += "\r\n" + s.Replace("&", "&"); // html decode url params } notificationInfo.MessageBody += "\r\n\r\n"; } notificationInfo.MessageBody += "\r\n\r\n" + postedBy; } notificationInfo.BodyTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ForumNotificationEmail.config"); notificationInfo.ForumOnlyTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ForumNotificationEmail-ForumOnly.config"); notificationInfo.ThreadOnlyTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ForumNotificationEmail-ThreadOnly.config"); notificationInfo.ModeratorTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ForumModeratorNotificationEmail.config"); notificationInfo.FromEmail = siteSettings.DefaultEmailFromAddress; notificationInfo.FromAlias = siteSettings.DefaultFromEmailAlias; if (config.OverrideNotificationFromAddress.Length > 0) { notificationInfo.FromEmail = config.OverrideNotificationFromAddress; notificationInfo.FromAlias = config.OverrideNotificationFromAlias; } notificationInfo.SiteName = siteSettings.SiteName; notificationInfo.ModuleName = module.ModuleTitle; notificationInfo.ForumName = forum.Title; notificationInfo.Subject = SecurityHelper.RemoveMarkup(thread.PostSubject); notificationInfo.MessageLink = threadViewUrl; notificationInfo.UnsubscribeForumThreadLink = siteRoot + "/Forums/UnsubscribeThread.aspx"; notificationInfo.UnsubscribeForumLink = siteRoot + "/Forums/UnsubscribeForum.aspx"; notificationInfo.SmtpSettings = smtpSettings; if (notifyModeratorOnly) { // just send notification to moderator List<string> moderatorsEmails = forum.ModeratorNotifyEmail.SplitOnChar(','); if (moderatorsEmails.Count > 0) { notificationInfo.ModeratorEmailAddresses = moderatorsEmails; ThreadPool.QueueUserWorkItem(new WaitCallback(ForumNotification.SendForumModeratorNotificationEmail), notificationInfo); } } else { // Send notification to subscribers DataSet dsThreadSubscribers = thread.GetThreadSubscribers(config.IncludeCurrentUserInNotifications); notificationInfo.Subscribers = dsThreadSubscribers; ThreadPool.QueueUserWorkItem(new WaitCallback(ForumNotification.SendForumNotificationEmail), notificationInfo); } }