[HttpPost]//Email notifications are handled here public ActionResult SendMessage(Message msg) { msg.fromName = User.Identity.Name; if (msg.UserTarget != null) { //Sending message to user msg.UserTargetId = repo.getIdByUsername(msg.UserTarget); if (!ChatApp.Hubs.UserCounter.Users.Contains(msg.UserTarget)) { // If target user is not online Task.Factory.StartNew(() => //Spawn new thread, kills server resources { var body = "<h5>You have a new message from user " + msg.fromName + "</h5><p>" + msg.Body + "</p>"; var header = "New message from " + msg.fromName + "!"; var email = repo.getEmailById(msg.UserTargetId); EmailHelper mail = new EmailHelper(body, header, email); mail.Send(); }); } } else { //Sending message to conference var confId = msg.ConfTarget ?? default(int); var confUsers = repo.getUsersByConferenceId(confId); Task.Factory.StartNew(() => { var body = "<p><b>" + msg.fromName + ": </b>" + msg.Body + "</p>"; var header = "New message from conference " + repo.getConfName(confId) + "!"; EmailHelper mail = new EmailHelper(body, header, null); foreach (var user in confUsers) {//Add offline users to Bcc if (!ChatApp.Hubs.UserCounter.Users.Contains(user.UserName)) { var email = repo.getEmailById(repo.getIdByUsername(user.UserName)); mail.AddCc(email); } } mail.Send(); }); } repo.addMsg(msg, repo.GetCurrentUser()); return(new EmptyResult()); }