Пример #1
2
        public ActionResult Index(int currentPageNumber, int nextPageNumber)
        {
            int startSerialNumber = ((nextPageNumber - 1) * 30) + 1;
            int endSerialNumber = ((nextPageNumber) * 30);

            List<Email> emails = new List<Email>();

            try
            {

                userGmailConfig = FetchUserGmailProfile();
                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    if (inbox.Count > 0)
                    {
                        int pageEndIndex = Math.Max(inbox.Count - startSerialNumber, 0);
                        int pageStartIndex = Math.Max(inbox.Count - endSerialNumber, 0);

                        var messages = inbox.Fetch(pageStartIndex, pageEndIndex, MessageSummaryItems.Envelope);

                        messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList();

                        foreach (var message in messages)
                        {
                            if (startSerialNumber <= endSerialNumber)
                            {
                                Email tempEmail = new Email()
                                {
                                    SerialNo = startSerialNumber,
                                    Uid = message.UniqueId,
                                    FromDisplayName = message.Envelope.From.First().Name,
                                    FromEmail = message.Envelope.From.First().ToString(),
                                    To = message.Envelope.To.ToString(),
                                    Subject = message.NormalizedSubject,
                                    TimeReceived = message.Envelope.Date.Value.DateTime,
                                    HasAttachment = message.Attachments.Count() > 0 ? true : false
                                };
                                emails.Add(tempEmail);
                                startSerialNumber++;
                            }
                        }
                    }
                }

                ViewBag.EmailId = userGmailConfig.GmailUsername;
                ViewBag.NoOfEmails = endSerialNumber;
                if (currentPageNumber > nextPageNumber)
                {
                    ViewBag.PageNumber = currentPageNumber - 1;
                }
                else
                {
                    ViewBag.PageNumber = currentPageNumber + 1;
                }
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            return View(emails);
        }
Пример #2
0
        private GmailConfig FetchUserGmailProfile()
        {
            if (Session["userGmailConfig"] == null)
            {
                var query = (from c in dataContext.GmailConfigs
                             where (c.Username.ToLower() == User.Identity.Name.ToLower())
                             select c);

                if (query.Count() == 1)
                {
                    userGmailConfig = query.FirstOrDefault();
                    userGmailConfig.GmailPassword = Decrypt(userGmailConfig.GmailPassword, true);
                    Session["userGmailConfig"]    = userGmailConfig;
                }
                else
                {
                    ViewBag.Message = "You have not configured your Gmail credentials, please configure the same before proceeding.";
                    Redirect("/Account/ManageGmailProfile");
                }
            }
            else
            {
                userGmailConfig = (Models.GmailConfig)Session["userGmailConfig"];
            }
            return(userGmailConfig);
        }
Пример #3
0
        public ActionResult ManageGmailProfile(Models.GmailConfig userInfo)
        {
            if (Request.IsAuthenticated && User.Identity.Name != "" && ModelState.IsValid)
            {
                userInfo.Username      = User.Identity.Name;
                userInfo.GmailPassword = Encrypt(userInfo.GmailPassword, true);
                var existingUser = from c in dataContext.GmailConfigs
                                   where (c.Username.ToLower() == userInfo.Username.ToLower())
                                   select c;
                if (existingUser.Count() != 0)
                {
                    Models.GmailConfig existingConfig = existingUser.FirstOrDefault();

                    existingConfig.GmailUsername         = userInfo.GmailUsername;
                    existingConfig.GmailPassword         = userInfo.GmailPassword;
                    existingConfig.IncomingServerAddress = userInfo.IncomingServerAddress;
                    existingConfig.IncomingServerPort    = userInfo.IncomingServerPort;
                    existingConfig.OutgoingServerAddress = userInfo.OutgoingServerAddress;
                    existingConfig.OutgoingServerPort    = userInfo.OutgoingServerPort;
                    existingConfig.UseSSL = userInfo.UseSSL;

                    dataContext.SubmitChanges();
                }
                else
                {
                    dataContext.GmailConfigs.InsertOnSubmit(userInfo);
                    dataContext.SubmitChanges();
                }
            }
            else
            {
                ViewBag.Message = "Please login to continue!";
            }
            return(View());
        }
Пример #4
0
        public ActionResult Index()
        {
            long         noOfEmails = 1;
            UniqueId     lastUid    = new UniqueId();
            List <Email> emails     = new List <Email>();

            try
            {
                userGmailConfig = FetchUserGmailProfile();

                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    if (inbox.Count > 0)
                    {
                        int index = Math.Max(inbox.Count - 30, 0);

                        var uids = (from c in inbox.Fetch(index, -1, MessageSummaryItems.UniqueId)
                                    select c.UniqueId).ToList();

                        var messages = inbox.Fetch(uids, MessageSummaryItems.Envelope);

                        messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList();

                        foreach (var message in messages)
                        {
                            Email tempEmail = new Email()
                            {
                                SerialNo        = noOfEmails,
                                Uid             = message.UniqueId,
                                FromDisplayName = message.Envelope.From.First().Name,
                                FromEmail       = message.Envelope.From.First().ToString(),
                                To            = message.Envelope.To.ToString(),
                                Subject       = message.NormalizedSubject,
                                TimeReceived  = message.Envelope.Date.Value.DateTime,
                                HasAttachment = message.Attachments.Count() > 0 ? true : false
                            };
                            lastUid = tempEmail.Uid;
                            emails.Add(tempEmail);
                            noOfEmails++;
                        }
                    }
                }

                ViewBag.EmailId = userGmailConfig.GmailUsername;
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }
            ViewBag.NoOfEmails = 30;
            ViewBag.PageNumber = 1;

            return(View(emails));
        }
Пример #5
0
        public JsonResult Delete(string csEmailUids)
        {
            JsonResult jsonResult = new JsonResult();

            var outputMessage = "";

            try
            {
                userGmailConfig = FetchUserGmailProfile();

                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadWrite);

                    var uids = new List <UniqueId>();

                    if (csEmailUids.Contains(','))
                    {
                        foreach (var item in csEmailUids.Split(','))
                        {
                            uids.Add(new UniqueId(Convert.ToUInt32(item)));
                        }
                    }
                    else
                    {
                        uids.Add(new UniqueId(Convert.ToUInt32(csEmailUids)));
                    }

                    client.Inbox.AddFlags(uids, MessageFlags.Deleted, true);

                    if (client.Capabilities.HasFlag(ImapCapabilities.UidPlus))
                    {
                        client.Inbox.Expunge(uids);
                    }
                    else
                    {
                        client.Inbox.Expunge();
                    }
                    outputMessage = "Email(s) deleted successfully!";
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            jsonResult.Data = new
            {
                message = outputMessage,
            };
            return(jsonResult);
        }
Пример #6
0
        public ActionResult ManageGmailProfile()
        {
            var query = (from c in dataContext.GmailConfigs
                         where (c.Username.ToLower() == User.Identity.Name.ToLower())
                         select c);

            Models.GmailConfig existingUser = new Models.GmailConfig();

            if (query.Count() == 1)
            {
                existingUser = query.FirstOrDefault();
                existingUser.GmailPassword = "";
            }
            return(View(existingUser));
        }
Пример #7
0
        public JsonResult Read(uint emailUid)
        {
            JsonResult email         = new JsonResult();
            var        outputMessage = "";

            try
            {
                userGmailConfig = FetchUserGmailProfile();
                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    MimeMessage message = inbox.GetMessage(new UniqueId(emailUid));

                    email.Data = new
                    {
                        FromDisplayName = message.From.FirstOrDefault().Name,
                        FromEmail       = message.From.FirstOrDefault().ToString(),
                        To      = message.To.FirstOrDefault().ToString(),
                        Subject = message.Subject,
                        Body    = message.HtmlBody,
                        message = "Email fetched successfully"
                    };
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            email.Data = new
            {
                message = outputMessage,
            };
            return(email);
        }
Пример #8
0
        private GmailConfig FetchUserGmailProfile()
        {
            if (Session["userGmailConfig"] == null)
            {
                var query = (from c in dataContext.GmailConfigs
                             where (c.Username.ToLower() == User.Identity.Name.ToLower())
                             select c);

                if (query.Count() == 1)
                {
                    userGmailConfig = query.FirstOrDefault();
                    userGmailConfig.GmailPassword = Decrypt(userGmailConfig.GmailPassword, true);
                    Session["userGmailConfig"] = userGmailConfig;
                }
                else
                {
                    ViewBag.Message = "You have not configured your Gmail credentials, please configure the same before proceeding.";
                    Redirect("/Account/ManageGmailProfile");
                }
            }
            else
            {
                userGmailConfig = (Models.GmailConfig)Session["userGmailConfig"];
            }
            return userGmailConfig;
        }
Пример #9
0
        public JsonResult Compose(Email email)
        {
            JsonResult jsonResult = new JsonResult();
            string outputMessage = "";
            try
            {

                userGmailConfig = FetchUserGmailProfile();

                var message = new MimeMessage();

                message.From.Add(new MailboxAddress(email.FromEmail, email.FromEmail));

                if (email.ToAsCsv.Contains(','))
                {
                    foreach (var item in email.ToAsCsv.Split(','))
                    {
                        message.To.Add(new MailboxAddress(item, item));
                    }
                }
                else if (email.ToAsCsv.Contains(';'))
                {
                    foreach (var item in email.ToAsCsv.Split(';'))
                    {
                        message.To.Add(new MailboxAddress(item, item));
                    }
                }
                else
                {
                    message.To.Add(new MailboxAddress(email.ToAsCsv, email.ToAsCsv));
                }
                message.Subject = email.Subject;
                message.Body = new TextPart("plain")
                {
                    Text = email.Body
                };

                using (var client = new SmtpClient())
                {
                    try
                    {
                        client.Connect(userGmailConfig.OutgoingServerAddress, userGmailConfig.OutgoingServerPort);
                        client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                        client.Send(message);
                        client.Disconnect(true);

                        outputMessage = "Your message was sent successfully";
                    }
                    catch (Exception)
                    {
                        outputMessage = "There was an error sending your mail.";
                    }
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            jsonResult.Data = new
            {
                message = outputMessage,
            };
            return jsonResult;
        }
Пример #10
0
        public JsonResult Read(uint emailUid)
        {
            JsonResult email = new JsonResult();
            var outputMessage = "";
            try
            {
                userGmailConfig = FetchUserGmailProfile();
                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    MimeMessage message = inbox.GetMessage(new UniqueId(emailUid));

                    email.Data = new
                    {
                        FromDisplayName = message.From.FirstOrDefault().Name,
                        FromEmail = message.From.FirstOrDefault().ToString(),
                        To = message.To.FirstOrDefault().ToString(),
                        Subject = message.Subject,
                        Body = message.HtmlBody,
                        message = "Email fetched successfully"
                    };
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            email.Data = new
            {
                message = outputMessage,
            };
            return email;
        }
Пример #11
0
        public ActionResult Index()
        {
            long noOfEmails = 1;
            UniqueId lastUid = new UniqueId();
            List<Email> emails = new List<Email>();

            try
            {
                userGmailConfig = FetchUserGmailProfile();

                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    if (inbox.Count > 0)
                    {
                        int index = Math.Max(inbox.Count - 30, 0);

                        var uids = (from c in inbox.Fetch(index, -1, MessageSummaryItems.UniqueId)
                                    select c.UniqueId).ToList();

                        var messages = inbox.Fetch(uids, MessageSummaryItems.Envelope);

                        messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList();

                        foreach (var message in messages)
                        {
                            Email tempEmail = new Email()
                            {
                                SerialNo = noOfEmails,
                                Uid = message.UniqueId,
                                FromDisplayName = message.Envelope.From.First().Name,
                                FromEmail = message.Envelope.From.First().ToString(),
                                To = message.Envelope.To.ToString(),
                                Subject = message.NormalizedSubject,
                                TimeReceived = message.Envelope.Date.Value.DateTime,
                                HasAttachment = message.Attachments.Count() > 0 ? true : false
                            };
                            lastUid = tempEmail.Uid;
                            emails.Add(tempEmail);
                            noOfEmails++;
                        }
                    }
                }

                ViewBag.EmailId = userGmailConfig.GmailUsername;
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }
            ViewBag.NoOfEmails = 30;
            ViewBag.PageNumber = 1;

            return View(emails);
        }
Пример #12
0
        public JsonResult Delete(string csEmailUids)
        {
            JsonResult jsonResult = new JsonResult();

            var outputMessage = "";
            try
            {

                userGmailConfig = FetchUserGmailProfile();

                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadWrite);

                    var uids = new List<UniqueId>();

                    if (csEmailUids.Contains(','))
                    {
                        foreach (var item in csEmailUids.Split(','))
                        {
                            uids.Add(new UniqueId(Convert.ToUInt32(item)));
                        }
                    }
                    else
                    {
                        uids.Add(new UniqueId(Convert.ToUInt32(csEmailUids)));
                    }

                    client.Inbox.AddFlags(uids, MessageFlags.Deleted, true);

                    if (client.Capabilities.HasFlag(ImapCapabilities.UidPlus))
                    {
                        client.Inbox.Expunge(uids);
                    }
                    else
                    {
                        client.Inbox.Expunge();
                    }
                    outputMessage = "Email(s) deleted successfully!";
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            jsonResult.Data = new
            {
                message = outputMessage,
            };
            return jsonResult;
        }
Пример #13
0
        public ActionResult ManageGmailProfile()
        {
            var query = (from c in dataContext.GmailConfigs
                         where (c.Username.ToLower() == User.Identity.Name.ToLower())
                         select c);

            Models.GmailConfig existingUser = new Models.GmailConfig();

            if (query.Count() == 1)
            {
                existingUser = query.FirstOrDefault();
                existingUser.GmailPassword = "";
            }
            return View(existingUser);
        }
Пример #14
0
        public ActionResult Index(int currentPageNumber, int nextPageNumber)
        {
            int startSerialNumber = ((nextPageNumber - 1) * 30) + 1;
            int endSerialNumber   = ((nextPageNumber) * 30);

            List <Email> emails = new List <Email>();

            try
            {
                userGmailConfig = FetchUserGmailProfile();
                using (ImapClient client = new ImapClient())
                {
                    client.Connect(userGmailConfig.IncomingServerAddress, userGmailConfig.IncomingServerPort, true);
                    client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                    var inbox = client.Inbox;
                    inbox.Open(FolderAccess.ReadOnly);

                    if (inbox.Count > 0)
                    {
                        int pageEndIndex   = Math.Max(inbox.Count - startSerialNumber, 0);
                        int pageStartIndex = Math.Max(inbox.Count - endSerialNumber, 0);

                        var messages = inbox.Fetch(pageStartIndex, pageEndIndex, MessageSummaryItems.Envelope);

                        messages = messages.OrderByDescending(message => message.Envelope.Date.Value.DateTime).ToList();

                        foreach (var message in messages)
                        {
                            if (startSerialNumber <= endSerialNumber)
                            {
                                Email tempEmail = new Email()
                                {
                                    SerialNo        = startSerialNumber,
                                    Uid             = message.UniqueId,
                                    FromDisplayName = message.Envelope.From.First().Name,
                                    FromEmail       = message.Envelope.From.First().ToString(),
                                    To            = message.Envelope.To.ToString(),
                                    Subject       = message.NormalizedSubject,
                                    TimeReceived  = message.Envelope.Date.Value.DateTime,
                                    HasAttachment = message.Attachments.Count() > 0 ? true : false
                                };
                                emails.Add(tempEmail);
                                startSerialNumber++;
                            }
                        }
                    }
                }

                ViewBag.EmailId    = userGmailConfig.GmailUsername;
                ViewBag.NoOfEmails = endSerialNumber;
                if (currentPageNumber > nextPageNumber)
                {
                    ViewBag.PageNumber = currentPageNumber - 1;
                }
                else
                {
                    ViewBag.PageNumber = currentPageNumber + 1;
                }
            }
            catch (Exception ex)
            {
                ViewBag.ErrorMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            return(View(emails));
        }
Пример #15
0
        public JsonResult Compose(Email email)
        {
            JsonResult jsonResult    = new JsonResult();
            string     outputMessage = "";

            try
            {
                userGmailConfig = FetchUserGmailProfile();

                var message = new MimeMessage();

                message.From.Add(new MailboxAddress(email.FromEmail, email.FromEmail));

                if (email.ToAsCsv.Contains(','))
                {
                    foreach (var item in email.ToAsCsv.Split(','))
                    {
                        message.To.Add(new MailboxAddress(item, item));
                    }
                }
                else if (email.ToAsCsv.Contains(';'))
                {
                    foreach (var item in email.ToAsCsv.Split(';'))
                    {
                        message.To.Add(new MailboxAddress(item, item));
                    }
                }
                else
                {
                    message.To.Add(new MailboxAddress(email.ToAsCsv, email.ToAsCsv));
                }
                message.Subject = email.Subject;
                message.Body    = new TextPart("plain")
                {
                    Text = email.Body
                };

                using (var client = new SmtpClient())
                {
                    try
                    {
                        client.Connect(userGmailConfig.OutgoingServerAddress, userGmailConfig.OutgoingServerPort);
                        client.Authenticate(new NetworkCredential(userGmailConfig.GmailUsername, userGmailConfig.GmailPassword));

                        client.Send(message);
                        client.Disconnect(true);

                        outputMessage = "Your message was sent successfully";
                    }
                    catch (Exception)
                    {
                        outputMessage = "There was an error sending your mail.";
                    }
                }
            }
            catch (Exception ex)
            {
                outputMessage = "There was an error in processing your request. Exception: " + ex.Message;
            }

            jsonResult.Data = new
            {
                message = outputMessage,
            };
            return(jsonResult);
        }