public void NewPostEmail(IEnumerable<Subscription> Subs, Post ThePost, Thread thread, string PostURL)
        {
            ListDictionary replacements = new ListDictionary();
            string AutoFromEmail = SiteConfig.AutomatedFromEmail.Value;

            MailDefinition md = new MailDefinition();

            md.BodyFileName = EmailTemplates.GenerateEmailPath(EmailTemplates.NewThreadReply);
            md.IsBodyHtml = true;
            md.From = AutoFromEmail;
            md.Subject = "Reply to Thread '" + thread.Title + "' - " + SiteConfig.BoardName.Value;

            replacements.Add("{REPLY_USERNAME}", ThePost.User.Username);
            replacements.Add("{REPLY_TEXT}", ThePost.Text);
            replacements.Add("{THREAD_TITLE}", thread.Title);
            replacements.Add("{POST_URL}", PostURL);
            replacements.Add("{BOARD_URL}", SiteConfig.BoardURL.Value);
            replacements.Add("{BOARD_NAME}", SiteConfig.BoardName.Value);

            System.Web.UI.Control ctrl = new System.Web.UI.Control { ID = "Something" };

            MailMessage message = md.CreateMailMessage("*****@*****.**", replacements, ctrl);

            //Send the message
            SmtpClient client = Settings.GetSmtpClient();

            foreach (Subscription s in Subs)
            {
                if (s.UserID == ThePost.UserID) continue;
                User u = s.User;
                message.To.Clear();
                message.To.Add(u.Email);
                try
                {
                    System.Threading.ThreadPool.QueueUserWorkItem(state => client.Send(message));
                }
                catch
                {
                }
            }
        }
        public Thread CreateThread(
            int forumID,
            int userID,
            string threadTitle,
            ThreadType threadType,
            string threadImage,
            string message,
            string pollText,
            string[] pollOptions,
            HttpPostedFileBase[] files)
        {
            Thread thread = new Thread
            {
                ForumID = forumID,
                Type = (int)threadType,
                Image = threadImage,
                Title = threadTitle,
                HasPoll = false
            };

            string parsedMessage = _parseServices.ParseBBCodeText(message);

            var firstPost = new Post()
            {
                UserID = userID,
                Date = DateTime.UtcNow,
                ThreadID = thread.ThreadID,
                TextOnly = _parseServices.GetTextOnly(message),
                Text = message,
                ParsedText = parsedMessage
            };

            thread.Posts.Add(firstPost);

            if (!string.IsNullOrWhiteSpace(pollText))
            {
                Poll poll = new Poll
                {
                    Question = pollText,
                    PollID = thread.ThreadID
                };

                thread.Poll = poll;

                var options = new System.Data.Objects.DataClasses.EntityCollection<PollOption>();
                foreach (string po in pollOptions)
                {
                    poll.PollOptions.Add(new PollOption
                    {
                        Text = po
                    });
                }
                thread.HasPoll = true;
            }

            if (files != null)
            {
                foreach (var file in files)
                {
                    string savedName = _fileServices.UploadFile(file);
                    firstPost.Attachments.Add(new Attachment()
                    {
                        Downloaded = 0,
                        SavedName = savedName,
                        DownloadName = file.FileName,
                        Size = file.ContentLength,
                        Type = file.ContentType
                    });
                }
            }
            _threadRepository.Add(thread);
            _unitOfWork.Commit();
            return thread;
        }
        public Post CreatePost(int threadID, int userID, string message, bool useSignature, HttpPostedFileBase[] files)
        {
            string parsedText = _parseServices.ParseBBCodeText(message);
            Post post = new Post()
            {
                Date = DateTime.UtcNow,
                ParsedText = parsedText,
                Text = message,
                TextOnly = _parseServices.GetTextOnly(message),
                ThreadID = threadID,
                UserID = userID,
                UseSignature = useSignature
            };

            _postRepository.Add(post);
            if (files != null)
                _fileServices.CreateAttachments(files, post.PostID);
            _unitOfWork.Commit();
            return post;
        }
        private PostEditorViewModel GeneratePostEditorViewModel(int threadID, EditorType editorType, Post post = null)
        {
            if (editorType == EditorType.Edit && post == null)
                throw new InvalidOperationException("postID is required to generate an edit PostViewModel");

            var model = new PostEditorViewModel();

            if (editorType == EditorType.Edit)
            {
                model.Message = post.Text;
                model.ShowSignature = post.UseSignature;
                model.PostID = post.PostID;
                model.SubscribeToThread = _threadServices.IsSubscribed(threadID, _currentUser.UserID);
                model.Attachments = _fileServices.GetPostAttachments(post.PostID);
            }

            return model;
        }