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()); } } }
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); } }
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; } }
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); } }
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()); } } }
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 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 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}'"); } }
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; } }
/// <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; }