/// <summary> /// Searches using an S22 Imap client /// </summary> /// <param name="searchCriteria"></param> /// <param name="processMessages"></param> /// <returns></returns> public IEnumerable<IEmail> Search(EmailSearchCriteria searchCriteria, bool processMessages = true) { // create client var imapClient = new ImapClient(_host, _port, _useSsl); // log in imapClient.Login(_userName, _password, AuthMethod.Auto); // search for messages var messageIds = imapClient.Search(GetSearchCondition(searchCriteria), searchCriteria.Folder); // no messages found - return empty collection if (messageIds == null || messageIds.Length == 0) return new List<IEmail>(); // get messages var messages = imapClient.GetMessages(messageIds, FetchOptions.TextOnly, true, searchCriteria.Folder); // check if messages downloaded properly if (messages == null || messages.Length == 0) throw new ImapMessageDownloadException(_host, _port, _userName, searchCriteria.Folder, messageIds); // create as S22ImapMessages return messages.Select(m => new S22ImapMessage(m)); }
private void CheckImapMail(ImapClient client) { const int maxtrys = 10; for (int i = 0; i < maxtrys; i++) { try { uint[] uids = client.Search(SearchCondition.Unseen()); foreach (MailMessage msg in uids.Select(uid => client.GetMessage(uid))) { Logger.Instance.LogFormat(LogType.Debug, this, "NEUE MAIL " + msg.Subject); MailOperation(msg); } break; } catch (NotAuthenticatedException) { client.Login(_configuration.UserName, _configuration.Password, AuthMethod.Login); } catch (Exception ex) { Logger.Instance.LogFormat(LogType.Error, this, ex.ToString()); } } }
private void CheckImapMail() { using (_imapClient = new ImapClient(_configuration.ServerName, _configuration.Port, _configuration.SSL)) { _imapClient.Login(_configuration.UserName, _configuration.Password, AuthMethod.Login); try { uint[] uids = _imapClient.Search(SearchCondition.Unseen()); foreach (MailMessage msg in uids.Select(uid => _imapClient.GetMessage(uid))) { Logger.Instance.LogFormat(LogType.Debug, this, "New mail " + msg.Subject); MailOperation(msg); } } catch (Exception ex) { Logger.Instance.LogFormat(LogType.Error, this, ex.ToString()); } } }
private void CheckImapMail() { try { using (ImapClient imapClient = new ImapClient(_configuration.ServerName, _configuration.Port, _configuration.SSL, null, _configuration.Encoding)) { imapClient.Login(_configuration.UserName, _configuration.Password, AuthMethod.Login); IEnumerable<uint> uids = imapClient.Search(SearchCondition.Unseen()); foreach (MailMessage msg in uids.Select(uid => imapClient.GetMessage(uid))) { try { ProcessMail(msg); } catch (Exception ex) { Logger.Instance.LogException(this, ex); } } } } catch (Exception ex) { // Sometimes an error occures, e.g. if the network was disconected or a timeout occured. Logger.Instance.LogException(this, ex); } }
static int Main(string[] args) { try { var cmdArgs = new Args(); CommandLine.Parser.Default.ParseArgumentsStrict(args, cmdArgs); string password = cmdArgs.Password; if (password == "*") { Console.Write("Password: "******"Password: "******"*", Math.Max(20, password.Length)))); } } if (cmdArgs.Verbose) { Console.WriteLine("Connecting to server"); } using (ImapClient cli = new ImapClient(cmdArgs.Host, cmdArgs.Port == 0 ? (cmdArgs.Ssl ? 993 : 143) : cmdArgs.Port, cmdArgs.Ssl)) { if (cmdArgs.Verbose) { Console.WriteLine("Logging in"); } cli.Login(cmdArgs.UserName, password, AuthMethod.Auto); if (cmdArgs.Verbose) { Console.WriteLine(); } string mb = cmdArgs.DraftsFolder; var ids = cli.Search(SearchCondition.All(), mb); foreach (var id in ids) { var fs = cli.GetMessageFlags(id, mb); if (fs.Contains(MessageFlag.Draft)) { continue; } if (cmdArgs.Verbose) { Console.WriteLine(id); Console.WriteLine("\t{0}: {1}", "Flags", string.Join(" ", fs.Select(f => f.ToString()))); var m = cli.GetMessage(id, FetchOptions.HeadersOnly, false, mb); Console.WriteLine("\tHeaders:"); foreach (string h in m.Headers) { Console.WriteLine("\t\t{0}: {1}", h, m.Headers[h]); } } Console.WriteLine("Setting Draft flag on message {0}", id); cli.SetMessageFlags(id, mb, MessageFlag.Draft, MessageFlag.Seen); var fs2 = cli.GetMessageFlags(id, mb); if (cmdArgs.Verbose) { Console.WriteLine("Message flags: {0}", string.Join(" ", fs2.Select(f => f.ToString()))); Console.WriteLine(); } } if (cmdArgs.Verbose) { Console.WriteLine("Logging out"); } cli.Logout(); } return 0; } catch (Exception x) { Console.WriteLine("{0}: {1}", x.GetType().FullName, x.Message); return 1; } }
static void Main(string[] args) { try { var cmdArgs = new Args(); CommandLine.Parser.Default.ParseArgumentsStrict(args, cmdArgs); string password = cmdArgs.Password; if (password == "*") { Console.Write("Password: "******"Password: "******"*", Math.Max(20, password.Length)))); } } Console.WriteLine("Connecting to server"); using (ImapClient cli = new ImapClient(cmdArgs.Host, cmdArgs.Port == 0 ? (cmdArgs.Ssl ? 993 : 143) : cmdArgs.Port, cmdArgs.Ssl)) { Console.WriteLine("Logging in"); cli.Login(cmdArgs.UserName, password, AuthMethod.Auto); Console.WriteLine(); Dump(() => cli.ListMailboxes(), "Mailboxes"); //Dump(() => cli.Capabilities(), "Capabilities"); //Dump(cli.GetMailboxInfo("INBOX")); //Dump(cli.GetMailboxInfo("Elementy wysłane")); string mb = cmdArgs.DraftsFolder; //Dump(cli.GetMailboxInfo(mb)); var ids = cli.Search(SearchCondition.All(), mb); Console.WriteLine("{0} message(s)"); foreach (var id in ids) { Console.WriteLine(id); var fs = cli.GetMessageFlags(id, mb); Console.WriteLine("\t{0}: {1}", "Flags", string.Join(" ", fs.Select(f => f.ToString()))); var m = cli.GetMessage(id, FetchOptions.Normal, false, mb); Console.WriteLine("\tHeaders:"); foreach (string h in m.Headers) { Console.WriteLine("\t\t{0}: {1}", h, m.Headers[h]); } if (m.Subject.StartsWith("[PATCH")) { var fileName = string.Format("{0}.patch", id); Console.WriteLine("Saving message to {0}", fileName); Func<string, string> adjustHeaderValue = k => { var v = m.Headers[k]; if (k == "Content-Type") { if (v != null) { var i = v.IndexOf("charset="); if (0 <= i) { return v.Substring(0, i) + "charset=\"UTF-8\""; } } } else if (k == "Content-Transfer-Encoding") { return "8bit"; } return v; }; File.WriteAllBytes( fileName, Encoding.UTF8.GetBytes( string.Join( Environment.NewLine, m.Headers.Cast<string>().Select(k => k + ": " + adjustHeaderValue(k)) .Concat( new[] { string.Empty, m.Body })))); } Console.WriteLine(); } Console.WriteLine("Logging out"); cli.Logout(); } } catch (Exception x) { Console.WriteLine(x); } }
public static void Start() { bool Gmail = Properties.Settings.Default.UseGmail; string Host = Gmail ? Properties.Settings.Default.GmailImapServer : Properties.Settings.Default.ImapServer; int Port = Gmail ? Int32.Parse(Properties.Settings.Default.GmailServerPort) : Int32.Parse(Properties.Settings.Default.ServerPort); string Username = Properties.Settings.Default.Username; string Password = Encryption.DecryptString(Properties.Settings.Default.Password); bool SSL = Gmail ? true : Properties.Settings.Default.UseSSL; IC = new ImapClient(Host, Port, Username, Password, AuthMethod.Login, SSL); IsRunning = true; /* Does NOT run in the context of the "UI thread" but in its _own_ thread */ IC.NewMessage += (sender, e) => { MailMessage m = null; int messageCount; lock (IC) { m = IC.GetMessage(e.MessageUID, FetchOptions.TextOnly, false); messageCount = IC.Search(SearchCondition.Unseen()).Length; }; NewMessageEventArgs args = new NewMessageEventArgs(m, messageCount); NewMessageEvent(sender, args); }; }
public static void GetEmails() { string ImapServer = "mail.ldddns.com"; string ImapUserame = "song"; string ImapPwd = "20191104"; var t = new S22.Imap.ImapClient(ImapServer, 110, ImapUserame, ImapPwd); using (S22.Imap.ImapClient client = new S22.Imap.ImapClient(ImapServer, 110, ImapUserame, ImapPwd)) { var unseen = client.Search(SearchCondition.Unseen()); if (unseen == null || unseen.Count() == 0) { Console.WriteLine(string.Format("==============>没有新邮件!")); return; } Console.WriteLine(string.Format("==============>开始检测")); foreach (uint uid in unseen) { var msg = client.GetMessage(uid, true); var dataStream = msg.AlternateViews[0].ContentStream; byte[] byteBuffer = new byte[dataStream.Length]; string altbody = msg.BodyEncoding.GetString(byteBuffer, 0, dataStream.Read(byteBuffer, 0, byteBuffer.Length)); try { } catch (Exception ex) { throw ex; } } } }
public List <Email> ReadEmails() { List <Email> emails = new List <Email>(); S22.Imap.IImapClient imapClient = new S22.Imap.ImapClient("imap.gmail.com", 993, "*****@*****.**", "Demo1234!", AuthMethod.Login, true); IEnumerable <String> mailboxes = imapClient.ListMailboxes(); foreach (String mailbox in mailboxes) { Debug.WriteLine(mailbox); } IEnumerable <uint> uids = imapClient.Search(SearchCondition.All(), "INBOX"); IEnumerable <MailMessage> messages = imapClient.GetMessages(uids); foreach (MailMessage message in messages) { Debug.WriteLine(message.Subject); emails.Add(new Email { Subject = message.Subject, Body = message.Body, From = message.From.ToString(), To = message.To.ToString(), Date = message.Date().Value }); } return(emails); }
private GetEmailResponse GetImapEmail(GetEmailRequest getEmailRequest) { using (var client = new ImapClient(getEmailRequest.HostName, getEmailRequest.Port, getEmailRequest.UserName, getEmailRequest.Password, AuthMethod.Login, getEmailRequest.UseSSL)) { var uids = client.Search(SearchCondition.Unseen()); var messages = client.GetMessages(uids); return new GetEmailResponse { Messages = messages }; } }
public IEnumerable <MailDto> ReceiveAsync(params string[] identifiers) { using (var client = new S22.Imap.ImapClient(this.Host, this.Port, this.EnableSsl)) { client.Login(this.Email, this.Password.Decrypt(), AuthMethod.Login); var uids = client.Search(SearchCondition.All()); var identifiersAsUid = identifiers.Select(x => Convert.ToUInt32(x)); foreach (var uid in uids.Where(x => !identifiersAsUid.Contains(x))) { var message = client.GetMessage(uid); yield return(this.CreateMail(message, uid.ToString())); } client.Logout(); } }
private void frmUpdateEmailTest_Load(object sender, EventArgs e) { { using (ImapClient client = new ImapClient("imap.gmail.com", 993, "*****@*****.**", "DeMonfortUniversity2015", AuthMethod.Auto, true)) { var uids = client.Search(SearchCondition.All()); var messages = client.GetMessages(uids); foreach (var mail in messages) { var header = mail.Headers["Subject"]; string body = mail.Body; string from = Convert.ToString(mail.From); string output = from.Substring(from.IndexOf("<") + 1, from.IndexOf(">") - from.IndexOf("<") - 1); textBox1.Text = output; } } } }
/// <summary> /// Get mails from server IMAP /// </summary> /// <param name="username">Username to connect to server(usually your email)</param> /// <param name="password">Password to connect</param> /// <param name="hostIn">host server</param> /// <param name="portIn">port</param> /// <param name="secure">Secure receiving</param> /// <returns>List of mails [from, date, subject, body]</returns> public static List<string[]> getMails(string username, string password, string hostIn, int portIn, bool secure) { List<string[]> messagesList = new List<string[]>(); using (ImapClient Client = new ImapClient(hostIn, portIn, username, password, AuthMethod.Login, secure)) { //IEnumerable<uint> uids = Client.Search(SearchCondition.Unseen()); IEnumerable<uint> uids = Client.Search(SearchCondition.All()); IEnumerable<MailMessage> messages = Client.GetMessages(uids); foreach (var message in messages) { string from = message.From.Address.ToString().Trim(); string date = message.Date().ToString().Trim(); string subject = message.Subject.ToString().Trim(); string body = message.Body.ToString().Trim(); messagesList.Add(new string[] { from, subject, date, body }); } } return messagesList; }
public void UpdateEmails() { using (ImapClient client = new ImapClient("imap.gmail.com", 993, "*****@*****.**", "DeMonfortUniversity2015", AuthMethod.Auto, true)) { int EmailAddressNo = 0; var uids = client.Search(SearchCondition.All()); var messages = client.GetMessages(uids); foreach (var mail in messages) { //set up the data connection clsDataConnection DB = new clsDataConnection(); DB.AddParameter("EmailContent", mail.Body); DB.Execute("sproc_tblEmail_CheckIfExists"); DB.Execute("sproc_tblArchive_CheckIfExists"); //Int32 Result = Convert.ToInt32(DB.DataTable.Rows[0]["EmailNo"]); if (DB.DataTable.Rows.Count == 0) { clsDataConnection DB5 = new clsDataConnection(); string from = Convert.ToString(mail.From); //this uses substrings to extract the data we need from the email string output = from.Substring(from.IndexOf("<") + 1, from.IndexOf(">") - from.IndexOf("<") - 1); DB5.AddParameter("EmailAddress", output); DB5.Execute("sproc_tblEmail_CheckEmailAddress"); if (DB.DataTable.Rows.Count == 0) { clsDataConnection DB3 = new clsDataConnection(); DB3.AddParameter("EmailAddress", output); DB3.Execute("sproc_tblEmailAddress_InsertNewEmailAddress"); } clsDataConnection DB4 = new clsDataConnection(); DB4.AddParameter("EmailAddress", output); DB4.Execute("sproc_tblEmail_CheckEmailAddress"); EmailAddressNo = Convert.ToInt32(DB4.DataTable.Rows[0]["EmailAddressNo"]); //new data connection for new parameters clsDataConnection DB2 = new clsDataConnection(); var header = mail.Headers["Subject"]; string body = mail.Body; DB2.AddParameter("EmailSubject", header); DB2.AddParameter("EmailContent", body); DB2.AddParameter("EmailAddressNo", EmailAddressNo); DB2.Execute("sproc_tblEmail_InsertNewEmail"); } } } }
//####################### //#Receive email methods# //####################### /// <summary> /// Retrieves all the unseen messages from the server /// </summary> /// <param name="FromAddress">User's email address</param> /// <param name="FromPass">User's password</param> /// <returns>All the retrieved messages</returns> public static List<MailMessage> GetAllMessages(string FromAddress, string FromPass) { // Check the host if (CheckEmailHostIMAP(FromAddress) == true && !(string.IsNullOrEmpty(FromPass))) { try { // Create a new ImapClient ImapClient client = new ImapClient(Host, Port, FromAddress, FromPass, AuthMethod.Login, true); // Get the uids IEnumerable<uint> uids = client.Search(SearchCondition.All()); // Get the messages IEnumerable<MailMessage> Messages = client.GetMessages(uids); // Convert to list List<MailMessage> MessagesList = Messages.ToList<MailMessage>(); // Return them return MessagesList; } catch (Exception exception) { // Create the error message string ErrorMessage = "ERROR 60002" + "\n" + exception.ToString(); // Show the error message Program.ErrorPopupCall(ErrorMessage); // Make an empty list to return List<MailMessage> Stop = new List<MailMessage>(); // Stop executing this method return Stop; } } else { // Create the error message string ErrorMessage = "ERROR 60003" + "\n" + "EmailHostIMAP(FromAddress) returned false"; // Show the error message Program.ErrorPopupCall(ErrorMessage); // Make an empty list to return List<MailMessage> Stop = new List<MailMessage>(); // Stop executing this method return Stop; } }
private void SynchronizeMailbox(ImapClient client, string mailbox, DirectoryInfo target) { var info = client.GetMailboxInfo(mailbox); Log.Info($"Synchronizing mailbox {info.Name} ({mailbox})."); // Fetch online data var onlineUids = client.Search(SearchCondition.All(), mailbox).ToList(); Log.Verbose($"Found {onlineUids.Count()} messages online."); // Match offline data foreach (var file in target.GetFiles("*.eml")) { var fileName = Path.GetFileNameWithoutExtension(file.Name); uint fileUid; if (!uint.TryParse(fileName.PadLeft(8, '0').Substring(0, 8), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out fileUid)) { Log.Warn($"Unexpected file '{file.Name}' found in mailbox {mailbox}."); continue; } if (this.Options.Delete && !onlineUids.Contains(fileUid)) { Log.Verbose($"Deleting obsolete message '{file.Name}'..."); file.Delete(); } onlineUids.Remove(fileUid); } // Fetch new files Log.Info($"Fetching {onlineUids.Count} messages..."); foreach (var onlineUid in onlineUids) { var message = client.GetMessage(onlineUid, FetchOptions.Normal, false, mailbox); if (message.From == null) message.From = new MailAddress(Options.UserName); var fileName = $"{onlineUid:x8} {CleanSubject(message.Subject)}.eml"; message.Save(Path.Combine(target.FullName, fileName)); Log.Verbose($"Fetched message '{fileName}'"); } }
//ReadEmail is the handler for email based detectors. It is designed //to retrieve email from a configured email service and parse the alerts public static void ReadEmail(string sVendor, string sFolderName, string sFolderNameTest, string sDetectorEmail, bool isParamTest) { switch (sVendor) { //Outlook based email plugin which requires the Outlook client to be installed. case "outlook": #region Microsoft Outlook Plugin //try //{ // //Setup connection information to mailstore // //If logon information is null then mailstore must be open already // //var oApp = new Microsoft.Office.Interop.Outlook.Application(); // //var sFolder = new Microsoft.Office.Interop.Outlook.Folder(sFolderName); // //var oNameSpace = oApp.GetNamespace("MAPI"); // //oNameSpace.Logon(null, null, true, true); // //var oInboxFolder = oNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); // //Outlook.Folder oFolder = oInboxFolder.Folder[sFolderName]; // //logging // //Logging_Fido.Main.RunLogging("Running FIDO on file " + sFolderName); // ////attach to folder and for each item in the folder then loop. During loop assign subject, body and detect malware type // //foreach (var item in sFolder.Items) // //{ // // var oMailItem = item as Microsoft.Office.Interop.Outlook._MailItem; // // if (oMailItem != null) // // { // // var sMessageBody = oMailItem.Body; // // } // // if (oMailItem != null) // // { // // var sSubject = oMailItem.Subject; // // } // //List<string> sERet = scan_email(sSubject, sMessageBody, sFolderName); // // if (sERet.First() == "Test Email") // // { // // oMailItem.Delete(); // // } // // else // // { // // fido.Form1.Run_FIDO(sMessageBody, sERet, "fubar", false, false, true, sVendor);//MalwareType // // oMailItem.Delete(); // // } // } #endregion //} //catch (Exception e) //{ // Fido_Modules.Fido.Fido_EventHandler.SendEmail("Fido Error", "Fido Failed: {0} Exception caught in Outlook emailreceive area:" + e); //} break; case "exchange": #region Microsoft Exchange Plugin //still need to build out direct Exchange access #endregion break; //IMAP based email plugin which has been verified to work with Gmail case "imap": #region IMAP Plugin try { //get encrypted password and decrypt //then login var sfidoemail = Object_Fido_Configs.GetAsString("fido.email.fidoemail", null); var sfidopwd = Object_Fido_Configs.GetAsString("fido.email.fidopwd", null); var sfidoacek = Object_Fido_Configs.GetAsString("fido.email.fidoacek", null); var sImapServer = Object_Fido_Configs.GetAsString("fido.email.imapserver", null); var iImapPort = Object_Fido_Configs.GetAsInt("fido.email.imapport", 0); sfidoacek = Aes_Crypto.DecryptStringAES(sfidoacek, "1"); sfidopwd = Aes_Crypto.DecryptStringAES(sfidopwd, sfidoacek); IImapClient gLogin = new ImapClient(sImapServer, iImapPort, sfidoemail, sfidopwd, AuthMethod.Login, true); var sSeperator = new[] { "," }; gLogin.DefaultMailbox = isParamTest ? sFolderNameTest : sFolderName; var listUids = new List<uint>(); //seperate out list of email addresses handed to emailreceive //then run query based on each email from the specified folder //and finally convert to array string[] aryInboxSearch = sDetectorEmail.Split(sSeperator, StringSplitOptions.RemoveEmptyEntries); foreach (var search in aryInboxSearch) { listUids.AddRange(gLogin.Search(SearchCondition.From(search)).ToList()); } var uids = listUids.ToArray(); uids = uids.Take(50).ToArray(); var msg = gLogin.GetMessages(uids); var mailMessages = msg as MailMessage[] ?? msg.ToArray(); for (var i = 0; i < mailMessages.Count(); i++) { var sMessageBody = mailMessages[i].Body; var sSubject = mailMessages[i].Subject; var sERet = ScanEmail(sSubject, sMessageBody, sFolderName, isParamTest); if (sERet == "Test Email") { Console.WriteLine(@"Test email found, putting in processed folder."); gLogin.MoveMessage(uids[i], "Processed"); } else { Console.WriteLine(@"Finished processing email alert, puttig in processed folder."); gLogin.MoveMessage(uids[i], "Processed"); } } #endregion } catch (Exception e) { Fido_EventHandler.SendEmail("Fido Error", "Fido Failed: {0} Exception caught in IMAP emailreceive area:" + e); } Console.WriteLine(@"Finished processing email alerts."); break; } }
/// <summary> /// Gets the email body. /// </summary> /// <param name="emailSubject">The email subject.</param> /// <param name="emailFrom">The email from.</param> /// <returns>Email body.</returns> private static HtmlDocument GetEmailBody(string emailSubject, string emailFrom) { var appSettings = ConfigurationManager.AppSettings; var hostname = appSettings[EmailHostname]; var port = Convert.ToInt32(appSettings[EmailPort]); var username = appSettings[EmailUsername]; var password = appSettings[EmailPassword]; var useSsl = Convert.ToBoolean(appSettings[EmailUseSSL]); var defaultMailbox = appSettings[EmailDefaultMailbox]; var client = new ImapClient(hostname, port, username, password, AuthMethod.Login, useSsl); client.DefaultMailbox = defaultMailbox; var messagesCountBefore = client.GetMailboxInfo().Messages; var emailBody = new HtmlDocument(); int checkEmailTimeout = 120; for (int i = 0; i < checkEmailTimeout; i++) { if (client.GetMailboxInfo().Messages > messagesCountBefore) { var uids = client.Search(SearchCondition.Subject(emailSubject) .And(SearchCondition.From(emailFrom))); if (uids.Count() > 0) { emailBody.LoadHtml(client.GetMessage(uids.First()).Body); return emailBody; } } Thread.Sleep(TimeSpan.FromSeconds(1)); } Logger.Instance.Error("Email has been not received."); return emailBody; }
private void CargarTodos() { var imap = new ImapClient( config.imap, config.puerto, config.correo, config.pwd, AuthMethod.Auto, true); IEnumerable<uint> uids = imap.Search( SearchCondition.SentSince(DateTime.Now.AddDays(-7)), "inbox" ); foreach (uint uid in uids) { Application.DoEvents(); Text = uid + "" + uids.Count(); if (!dataGridView1.IsDisposed) { MailMessage m = imap.GetMessage(uid,false); DateTime d = Convert.ToDateTime(m.Headers.Get("Date")); int indice = dataGridView1.Rows.Add(m.From, m.Subject, d); dataGridView1.Rows[indice].Tag = m; dataGridView1.Sort(dataGridView1.Columns[2], System.ComponentModel.ListSortDirection.Descending); } else { break; } } if (imap.Supports("IDLE")) { imap.NewMessage += OnNewMessage; } }
private void CargarNoLeidos() { var imap = new ImapClient( config.imap, config.puerto, config.correo, config.pwd, AuthMethod.Auto, true); IEnumerable<uint> uids = imap.Search(SearchCondition.Unseen()); IEnumerable<MailMessage> mensajes = imap.GetMessages(uids); foreach (var m in mensajes) { DateTime d = Convert.ToDateTime(m.Headers.Get("Date")); int indice = dataGridView1.Rows.Add(m.From, m.Subject, d); dataGridView1.Rows[indice].Tag = m; dataGridView1.Sort(dataGridView1.Columns[2], System.ComponentModel.ListSortDirection.Descending); } }
//Denne metoden henter uleste e-post fra inboxen public void retrieveUnseenMessages() { using (ImapClient Client = new ImapClient("imap.gmail.com", 993, mailAddress, mailPassword, AuthMethod.Login, true)) { IEnumerable<uint> uids = Client.Search(SearchCondition.All()); this.messages = Client.GetMessages(uids,true); //true means it sets the messages to seen. But we now read All messages because of "seachcondition.all()" } }
public void retrieveMail(String mailbox = "INBOX") { currentMailBox = mailbox; MailList.Clear(); if (imapHost.Equals(null) || imapHost.Equals(null) || password.Equals(null)) { ALSMessageBox mb = new ALSMessageBox("Not logged in"); mb.Show(); return; } try { // The default port for IMAP over SSL is 993. using (ImapClient client = new ImapClient(imapHost, 993, username, password, AuthMethod.Login, true)) { folders = client.ListMailboxes(); Console.WriteLine("We are connected!"); // Returns a collection of identifiers of all mails matching the specified search criteria. IEnumerable<uint> uids = null; uids = client.Search(SearchCondition.All(), mailbox); // Download mail messages from the default mailbox. uint[] uidArray = uids.ToArray(); Array.Reverse(uidArray); uids = uids.Reverse(); if (uidArray.Length > DOWNLOAD_COUNT) Array.Resize(ref uidArray, DOWNLOAD_COUNT); IEnumerable<MailMessage> messages = client.GetMessages(uidArray, FetchOptions.NoAttachments, true, mailbox); IEnumerator<MailMessage> messageList = messages.GetEnumerator(); IEnumerator<uint> uidList = uids.GetEnumerator(); while (messageList.MoveNext()) { uidList.MoveNext(); string toAddress; try { toAddress = messageList.Current.To[0].Address; } catch { toAddress = "None"; } EmailMessage temp = new EmailMessage(messageList.Current.Subject, messageList.Current.Body, toAddress, messageList.Current.From.Address, EmailClient.Date(messageList.Current), uidList.Current); int hash = temp.GetHashCode(); bool contains = false; foreach (EmailMessage m in MailList) { if (m.GetHashCode().Equals(hash)) contains = true; } if (!contains) { bool added = false; int index = 0; if (MailList.Count == 0) { MailList.Add(temp); } else { while (!added && index < MailList.Count) { switch (MailList[index].CompareTo(temp)) { case -1: MailList.Insert(index, temp); added = true; break; case 0: MailList.Insert(index, temp); added = true; break; case 1: index++; break; case -99: //error code break; } } if (!added) MailList.Add(temp); } } } } MailList.Reverse(); } catch (InvalidCredentialsException) { }catch(System.Net.Sockets.SocketException e) { ALSMessageBox mb = new ALSMessageBox("Not connected to internet"); mb.Show(); }catch(Exception e) { ALSMessageBox mb = new ALSMessageBox("Unknown error occurred"); mb.Show(); } }