Example #1
0
        static void RetrieveMailWithXOAUTH2Microsoft(string userEmail, string accessToken, string SenderContainsEmail, int AccountId)
        {
            try
            {
                // Hotmail/Outlook/LIVE Imap4 Server
                MailServer oServer = new MailServer("imap-mail.outlook.com",
                                                    userEmail,
                                                    accessToken, // use access token as password
                                                    ServerProtocol.Imap4);

                // Set IMAP OAUTH 2.0
                oServer.AuthType = ServerAuthType.AuthXOAUTH2;
                // Enable SSL/TLS connection, most modern email server require SSL/TLS by default
                oServer.SSLConnection = true;
                // Set IMAP4 SSL Port
                oServer.Port = 993;

                MailClient oClient = new MailClient("TryIt");
                // Get new email only, if you want to get all emails, please remove this line
                oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfosOptionType.NewOnly;
                oClient.GetMailInfosParam.SenderContains      = SenderContainsEmail;

                Console.WriteLine("Connecting {0} ...", oServer.Server);
                oClient.Connect(oServer);

                MailInfo[] infos = oClient.GetMailInfos();
                Console.WriteLine("Total {0} email(s)\r\n", infos.Length);

                using (var db = new RealEstateEntities())
                {
                    var oLeadEmailMessage = db.tblLeadEmailMessages.Where(x => x.AccountId == AccountId && x.EmailMessageId == 0).ToList();
                    foreach (var item in oLeadEmailMessage)
                    {
                        for (int i = 0; i < infos.Length; i++)
                        {
                            MailInfo info = infos[i];
                            Console.WriteLine("Index: {0}; Size: {1}; UIDL: {2}",
                                              info.Index, info.Size, info.UIDL);

                            // Receive email from email server
                            Mail oMail = oClient.GetMail(info);

                            Console.WriteLine("From: {0}", oMail.From.ToString());
                            Console.WriteLine("Subject: {0}\r\n", oMail.Subject);


                            if (item.Subject.Equals(oMail.Subject.Replace("Re:", "").Replace("(Trial Version)", "").Trim()))
                            {
                                tblLeadEmailMessage obj = new tblLeadEmailMessage();
                                obj.AccountId      = AccountId;
                                obj.LeadId         = item.LeadId;
                                obj.Subject        = item.Subject;
                                obj.Body           = oMail.HtmlBody;
                                obj.IsReplay       = true;
                                obj.EmailMessageId = item.LeadEmailMessageId;
                                obj.CreatedDate    = oMail.ReceivedDate;
                                db.tblLeadEmailMessages.Add(obj);
                                db.SaveChanges();
                            }


                            // Mark email as read to prevent retrieving this email again.
                            oClient.MarkAsRead(info, true);

                            // If you want to delete current email, please use Delete method instead of MarkAsRead
                            // oClient.Delete(info);
                        }
                    }
                }
                // Quit and expunge emails marked as deleted from server.
                oClient.Quit();
                Console.WriteLine("Completed!");
            }
            catch (Exception ep)
            {
                Console.WriteLine(ep.Message);
            }
        }
Example #2
0
        static void RetrieveMailWithXOAUTH(string userEmail, string accessToken, string SenderContainsEmail, int AccountId, /*int LeadEmailMessageId*/ tblLeadEmailMessage itemLeadEmailMessage)
        {
            try
            {
                //// Create a folder named "inbox" under current directory
                //// to save the email retrieved.
                //string localInbox = string.Format("{0}\\inbox", Directory.GetCurrentDirectory());
                //// If the folder is not existed, create it.
                //if (!Directory.Exists(localInbox))
                //{
                //    Directory.CreateDirectory(localInbox);
                //}

                MailServer oServer = new MailServer("imap.gmail.com",
                                                    userEmail,
                                                    accessToken, // use access token as password
                                                    ServerProtocol.Imap4);

                // Set IMAP OAUTH 2.0
                oServer.AuthType = ServerAuthType.AuthXOAUTH2;
                // Enable SSL/TLS connection, most modern email server require SSL/TLS by default
                oServer.SSLConnection = true;
                // Set IMAP4 SSL Port
                oServer.Port = 993;

                MailClient oClient = new MailClient("TryIt");
                // Get new email only, if you want to get all emails, please remove this line
                oClient.GetMailInfosParam.GetMailInfosOptions = GetMailInfosOptionType.NewOnly;
                oClient.GetMailInfosParam.SenderContains      = SenderContainsEmail;


                Console.WriteLine("Connecting {0} ...", oServer.Server);
                utility.log("Connecting Gmail {0} ..." + oServer.Server);
                oClient.Connect(oServer);

                MailInfo[] infos = oClient.GetMailInfos();
                //MailInfo[] infos = oClient.SearchMail("ALL FROM \"Constro\"");
                Console.WriteLine("Total {0} email(s)\r\n", infos.Length);
                utility.log("Total number of new email found from Gmail:-" + infos.Length);

                using (var db = new RealEstateEntities())
                {
                    //var oLeadEmailMessage = db.tblLeadEmailMessages.Where(x => x.AccountId == AccountId && x.EmailMessageId == 0).ToList();
                    //foreach (var item in itemLeadEmailMessage)
                    //{
                    for (int i = 0; i < infos.Length; i++)
                    {
                        MailInfo info = infos[i];
                        Console.WriteLine("Index: {0}; Size: {1}; UIDL: {2}; Flags: {3}",
                                          info.Index, info.Size, info.UIDL, info.Flags);


                        // Receive email from email server
                        Mail oMail = oClient.GetMail(info);

                        Console.WriteLine("From: {0}", oMail.From.ToString());
                        Console.WriteLine("To: {0}", oMail.To.ToString());
                        Console.WriteLine("Subject: {0}\r\n", oMail.Subject);

                        utility.log("From:-" + oMail.From.ToString());
                        utility.log("To:-" + oMail.To[0].ToString());
                        utility.log("Subject:-" + oMail.Subject);
                        utility.log("Subject1:-" + oMail.Subject.Replace("Re:", "").Replace("(Trial Version)", "").Trim());
                        //Console.WriteLine("Body: {0}\r\n", oMail.HtmlBody);
                        //Console.WriteLine("Text Body: {0}\r\n", oMail.TextBody);
                        string oRepSubj = oMail.Subject.Replace("Re:", "").Replace("(Trial Version)", "").Trim();
                        if (itemLeadEmailMessage.Subject.Equals(oRepSubj)) // && LeadEmailMessageId == item.LeadEmailMessageId
                        {
                            utility.log(itemLeadEmailMessage.Subject + "----" + oMail.Subject + "---Matched");

                            foreach (var itemAttachment in oMail.Attachments)
                            {
                                if (itemAttachment.ContentID != "")
                                {
                                    string matchString = Regex.Match(oMail.HtmlBody, "<img.+?src=[\"'](.+?)[\"'].+?>", RegexOptions.IgnoreCase).Groups[0].Value;
                                    if (matchString != "")
                                    {
                                        if (matchString.Contains(itemAttachment.ContentID))
                                        {
                                            if (!Directory.Exists(MailReadImgPath))
                                            {
                                                Directory.CreateDirectory(MailReadImgPath);
                                            }
                                            string fileName = Guid.NewGuid().ToString("N").Substring(0, 8) + Path.GetExtension(itemAttachment.Name);
                                            File.WriteAllBytes(MailReadImgPath + "\\" + fileName, itemAttachment.Content); // Requires System.IO

                                            oMail.HtmlBody = Regex.Replace(oMail.HtmlBody, matchString, @"<img src='../../mail-read-img/" + fileName + @"'/>");
                                        }
                                    }
                                }
                            }

                            tblLeadEmailMessage obj = new tblLeadEmailMessage();
                            obj.AccountId = AccountId;
                            obj.LeadId    = itemLeadEmailMessage.LeadId;
                            foreach (var itemTo in oMail.To)
                            {
                                obj.ToName = itemTo.Name == "" ? itemTo.Address.Split('@')[0] : itemTo.Name;
                            }
                            obj.FromName       = oMail.From.Name;
                            obj.Subject        = itemLeadEmailMessage.Subject;
                            obj.Body           = oMail.HtmlBody;
                            obj.IsReplay       = true;
                            obj.IsRead         = false;
                            obj.EmailMessageId = itemLeadEmailMessage.LeadEmailMessageId;
                            obj.CreatedDate    = oMail.ReceivedDate;
                            db.tblLeadEmailMessages.Add(obj);
                            db.SaveChanges();


                            var oLeadEmailMessage = db.tblLeadEmailMessages.Where(x => x.AccountId == AccountId && x.LeadEmailMessageId == itemLeadEmailMessage.LeadEmailMessageId && x.IsType == MessageType.EmailMessage.GetHashCode()).FirstOrDefault();
                            if (oLeadEmailMessage != null)
                            {
                                oLeadEmailMessage.IsRead = false;
                                db.SaveChanges();
                            }

                            foreach (var itemAttachment in oMail.Attachments)
                            {
                                if (itemAttachment.ContentID == "")
                                {
                                    string fileName = Guid.NewGuid().ToString("N").Substring(0, 8) + Path.GetExtension(itemAttachment.Name);
                                    //FileStream filestream = new FileStream(ImagePath + "\\" + item.AccountId + "\\" + item.LeadId + "\\" + fileName, FileMode.Create);
                                    //var streamwriter = new StreamWriter(filestream);
                                    //streamwriter.AutoFlush = true;
                                    //Console.SetOut(streamwriter);
                                    //Console.SetError(streamwriter);

                                    File.WriteAllBytes(ImagePath + "\\" + itemLeadEmailMessage.AccountId + "\\" + itemLeadEmailMessage.LeadId + "\\" + fileName, itemAttachment.Content); // Requires System.IO

                                    tblLeadEmailMessageAttachment oData = new tblLeadEmailMessageAttachment();
                                    //oData.LeadEmailMessageId = item.LeadEmailMessageId;
                                    oData.LeadEmailMessageId = obj.LeadEmailMessageId;
                                    oData.Attachement        = string.IsNullOrEmpty(fileName) ? string.Empty : fileName;
                                    oData.CreatedDate        = DateTime.Now;
                                    db.tblLeadEmailMessageAttachments.Add(oData);
                                    db.SaveChanges();
                                }
                            }

                            // Mark email as read to prevent retrieving this email again.
                            oClient.MarkAsRead(info, true);
                        }

                        // If you want to delete current email, please use Delete method instead of MarkAsRead
                        // oClient.Delete(info);
                    }
                    //}
                }
                // Quit and expunge emails marked as deleted from server.
                oClient.Quit();
                utility.log("Gmail Service completed:-" + DateTime.Now);
                utility.log("===================");
                //Console.WriteLine("Completed!");
            }
            catch (Exception ep)
            {
                Console.WriteLine(ep.Message);
            }
        }