private void SendEmail(NotificationEmailDefintion defintion)
        {
            var emailMessage = new Mandrill.EmailMessage();

            emailMessage.from_email = defintion.ConsultantEmail;
            emailMessage.from_name  = defintion.ConsultantName;
            var newNotificationHtml = "";
            var consultantHtml      = "";

            try
            {
                var consultantStream =
                    Assembly.GetExecutingAssembly()
                    .GetManifestResourceStream("Task.Email.Template.ConsultantRow.html");
                consultantHtml = new StreamReader(consultantStream).ReadToEnd();
                if (defintion.Type == "Phone")
                {
                    var newContactStream =
                        Assembly.GetExecutingAssembly()
                        .GetManifestResourceStream("Task.Email.Template.NewPhoneCallNotificationTemplate.html");
                    newNotificationHtml = new StreamReader(newContactStream).ReadToEnd();
                }
                else if (defintion.Type == "Email")
                {
                    var newContactStream =
                        Assembly.GetExecutingAssembly()
                        .GetManifestResourceStream("Task.Email.Template.NewEmailNotificationTemplate.html");
                    newNotificationHtml = new StreamReader(newContactStream).ReadToEnd();
                }
                else if (defintion.Type == "Chat")
                {
                    var newContactStream =
                        Assembly.GetExecutingAssembly()
                        .GetManifestResourceStream("Task.Email.Template.NewChatNotificationTemplate.html");
                    newNotificationHtml = new StreamReader(newContactStream).ReadToEnd();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Error when accessing embeded resources, NewContactEmail.html and ContactRow.html and ConsultantRow.html, Error Message: " +
                    e);
                throw;
            }


            List <EmailAddress> emailAddresses = new List <EmailAddress>();
            EmailAddress        emailAddress   = new EmailAddress();

            emailAddress.email = defintion.UserEmail;
            emailAddress.name  = defintion.UserName;
            emailAddresses.Add(emailAddress);
            emailMessage.to = emailAddresses;

            emailMessage.subject = "Ny Kontakt";

            var cosnultantRow = Render.StringToString(consultantHtml, defintion);
            var htmlMessage   = Render.StringToString(newNotificationHtml, defintion);

            htmlMessage = htmlMessage.Replace("[[ConsultantRow]]", cosnultantRow);

            emailMessage.html = htmlMessage;

            emailSender.Send(emailMessage);
        }
        public NotificationEmailDefintion GetDefinition(int contactId, string userId)
        {
            var contact = contactRepository.Where(c => c.Id == contactId)
                          .Include(l => l.Client)
                          .Include(l => l.Client.InsideUserSets);

            var client = contact.First().Client;

            var insideUser = client.InsideUserSets.FirstOrDefault(u => u.Id == userId && (bool)u.ReceiveEmail);

            if (insideUser == null)
            {
                return(null);
            }
            var consultantForUser =
                adminRepository.Where(
                    a => a.Role.Any(r => r.Name == "consultant") && a.ConsultantsForClients.Any(c => c.Id == client.Id))
                .SingleOrDefault();

            var defenition = new NotificationEmailDefintion();

            var isValidEmailAdress = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$", RegexOptions.IgnoreCase);

            if (isValidEmailAdress.IsMatch(insideUser.Email))
            {
                defenition.Type     = contact.First().LeadType;
                defenition.UserName = client.Name;
                var contactDetails = GetContactDetails(insideUser.Id, contact.First());
                defenition.UserEmail = insideUser.Email;

                var clientLocalTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");

                var utcDateTime = contact.First().Date;
                utcDateTime = DateTime.SpecifyKind(utcDateTime, DateTimeKind.Utc);

                var localDateTime =
                    TimeZoneInfo.ConvertTime(utcDateTime, clientLocalTimeZoneInfo).ToString("yyyy-MM-dd HH:mm");

                defenition.Date              = localDateTime;
                defenition.InsideUrl         = contactDetails.InsideUrl;
                defenition.From              = contactDetails.From;
                defenition.SubjectOrDuration = contactDetails.SubjectOrDuration;

                if (consultantForUser != null)
                {
                    defenition.ConsultantEmail = consultantForUser.Email;
                    defenition.ConsultantPhone = consultantForUser.Phone;
                    defenition.ConsultantName  = consultantForUser.Name;
                    if (consultantForUser.ImageUrl != null && !consultantForUser.ImageUrl.Contains("http://"))
                    {
                        defenition.ConsultantImage = "http://inside.helloy.se" + consultantForUser.ImageUrl;
                    }
                    else
                    {
                        defenition.ConsultantImage = consultantForUser.ImageUrl;
                    }
                }
                return(defenition);
            }
            else
            {
                throw new Exception("User meail adress Was Invalid");
            }
        }