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); } }
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); } }