public void SendQueuedEmails()
        {
            // iterate emails in our queue(database) and send them
            using (DBEntities dbe = new DBEntities()) {
                List <Email> emailQueue = dbe.Emails.ToList();

                SmtpClient client = new SmtpClient(_configuration["SmtpServer:Host"], Convert.ToInt32(_configuration["SmtpServer:Port"]))
                {
                    UseDefaultCredentials = false,
                    Credentials           = new NetworkCredential(_configuration["SmtpServer:Username"], _configuration["SmtpServer:Password"])
                };

                foreach (Email email in emailQueue)
                {
                    try {
                        //deserialize json string to onj
                        MailMessageJsonModel jsonMail = JsonConvert.DeserializeObject <MailMessageJsonModel>(email.Content);
                        MailMessage          mailMess = new MailMessage(jsonMail.From, jsonMail.To, jsonMail.Subject, jsonMail.Body)
                        {
                            IsBodyHtml = true
                        };

                        //check if there's attachment/s
                        if (!string.IsNullOrWhiteSpace(email.AttachmenList) && email.AttachmenList.Split(',').Count() > 0)
                        {
                            foreach (var item in email.AttachmenList.Split(','))
                            {
                                string[] info        = item.Split('|');
                                byte[]   fileContent = WebDAVClient.GetFile(info[0]);

                                MemoryStream ms         = new MemoryStream(fileContent);
                                Attachment   attachment = new Attachment(ms, info[1])
                                {
                                    ContentType = new ContentType(info[2])
                                };

                                mailMess.Attachments.Add(attachment);
                            }
                        }

                        client.Send(mailMess);

                        //delete this email from our queue
                        dbe.Emails.Remove(email);
                        dbe.SaveChanges(); //removed from queue
                    }
                    catch (Exception ex) {
                        //if sending failed
                        email.SmtpError = ex.Message;
                        email.Status    = MailStatus.FAILED;
                        dbe.Emails.Update(email);
                        dbe.SaveChanges();
                    }
                }
            }
        }
        public Email CreateEmailEntity(string From, string To, string Body, string Subject, string AttachmentList)
        {
            try {
                //create MailMessage obj
                MailMessageJsonModel mailMessage = new MailMessageJsonModel(From, To, Body, Subject);
                //serialize MailMessage to JSON object
                string mailMessageJson = JsonConvert.SerializeObject(mailMessage);

                //create Email object
                Email email = new Email {
                    AttachmenList = AttachmentList,
                    Content       = mailMessageJson,
                    DateInserted  = DateTime.UtcNow,
                    SmtpError     = "",
                    Status        = MailStatus.NEW
                };

                return(email);
            }
            catch (Exception) {
                return(null);
            }
        }