public virtual async Task <int> GetTotalMailCount() { _mailFolder = await AuthenticateAsync(); _mailFolder.Open(FolderAccess.ReadOnly); return((await _mailFolder.SearchAsync(SearchQuery.All))?.Count ?? 0); }
public async Task <List <MimeMessage> > GetMessages(IMailFolder sourceFolder, SearchQuery query, CancellationToken ct) { return(await PolicyWrapper.WrapRetryOnNotConnected(async() => { await sourceFolder.OpenAsync(FolderAccess.ReadOnly).ConfigureAwait(false); var uids = (await sourceFolder.SearchAsync(query).ConfigureAwait(false)) .Take(10); // TODO Only for test for better performance var messages = new List <MimeMessage>(); foreach (var uid in uids) { if (ct.IsCancellationRequested) { break; } try { var msg = await sourceFolder.GetMessageAsync(uid).ConfigureAwait(false); messages.Add(msg); } catch (FolderNotOpenException) { break; } } return messages; }, EnsureConnected).ConfigureAwait(false)); }
public static async Task<(UniqueId, IMailFolder?)> FindIdByMessageIdHeader(this IMailFolder folder, string? messageIdHeaderValue, bool recursive, bool skipParent, bool onlyImmediateChildren = false) { if (messageIdHeaderValue == null) { return (UniqueId.Invalid, null); } await folder.OpenAsync(FolderAccess.ReadOnly); if (!skipParent) { var hit = (await folder.SearchAsync(SearchQuery.HeaderContains("Message-ID", messageIdHeaderValue))).FirstOrDefault(); // sometimes there are more than one if the companion got terminated; ignore this, think later about handling this if (hit.IsValid) return (hit, folder); } var subfolders = await folder.GetSubfoldersAsync(false); foreach (var subFolder in subfolders) { var hit2 = await subFolder.FindIdByMessageIdHeader(messageIdHeaderValue, recursive && onlyImmediateChildren, false, onlyImmediateChildren); if (hit2.Item1.IsValid) { return hit2; } } return (UniqueId.Invalid, null); }
public virtual async Task <IList <UniqueId> > GetUIds(ImapFilter filter = null) { _mailFolder = await AuthenticateAsync(); await _mailFolder.OpenAsync(FolderAccess.ReadOnly); if (filter == null) { _lastRetrievedUIds = await _mailFolder.SearchAsync(new SearchQuery()); } else { _lastRetrievedUIds = await _mailFolder.SearchAsync(filter.ToSearchQuery()); } if (_lastRetrievedUIds == null) { _lastRetrievedUIds = new List <UniqueId>(); } return(_lastRetrievedUIds); }
public async Task TestImapNotCount4novOutlook() { var count = 0; using (var _clientImap4 = new ImapClient()) { _clientImap4.Connect("outlook.office365.com", 993, true); // Como não há autenticação OAuth2 na lib, desabilita o mecanismo de conexão. _clientImap4.AuthenticationMechanisms.Remove("XOAUTH2"); _clientImap4.Authenticate(OUTLOOK_USERNAME, OUTLOOK_PASSWORD); IMailFolder mailBox = null; if ((_clientImap4.Capabilities & (ImapCapabilities.SpecialUse | ImapCapabilities.XList)) != 0) { mailBox = _clientImap4.GetFolder("INBOX"); } var selectedFolder = _clientImap4.GetFolder(_clientImap4.PersonalNamespaces[0]); foreach (var existentFolder in selectedFolder.GetSubfolders(false)) { if (existentFolder.Name.ToLower().Contains("INBOX".ToLower().Trim())) { mailBox = existentFolder; } } mailBox.Open(FolderAccess.ReadWrite); // Filtra todas as mensagens a partir da data indicada e que não foram marcadas como visualizadas. // Mais informações em: https://components.xamarin.com/gettingstarted/mailkit var dateToFilter = new DateTime(2018, 11, 04); var query = SearchQuery.All.And(SearchQuery.DeliveredAfter(dateToFilter)); var IdsResult = await mailBox.SearchAsync(query).ConfigureAwait(false); count = IdsResult.Count(); _clientImap4.Disconnect(true); Assert.True(count > 0); } }
public static async Task <List <MeasuredData> > ReceiveEmailAsync(DateTime?dateTime) { List <MeasuredData> measuredDatas = new List <MeasuredData>(); try { using (ImapClient client = new ImapClient()) { await client.ConnectAsync("imap.gmail.com", 993, true); await client.AuthenticateAsync(FromEmail, Password); IMailFolder inbox = client.Inbox; await inbox.OpenAsync(FolderAccess.ReadOnly); dynamic query; if (dateTime == null) { query = SearchQuery.FromContains("balpisystem"); } else { query = SearchQuery.DeliveredAfter(DateTime.Parse(dateTime.Value.AddHours(-24).ToString())) //Message sending time .And(SearchQuery.FromContains("balpisystem")); } foreach (var uid in await inbox.SearchAsync(query)) { try { List <string> text = new List <string>(); var message = await inbox.GetMessageAsync(uid); var html = new HtmlAgilityPack.HtmlDocument(); html.LoadHtml(message.HtmlBody); html.DocumentNode.SelectNodes("//span/text()").ToList().ForEach(x => text.Add(x.InnerHtml.Replace("\t", ""))); var value = text[text.FindIndex(x => x.Contains("Значение")) + 1]; var date = text[text.FindIndex(x => x.Contains("среднего")) + 1]; date = date.Substring(0, date.IndexOf("Central") - 1); var dateTimeServer = DateTime.ParseExact(date, "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); if (dateTimeServer > dateTime || dateTime == null) { int MeasuredParameterId = 9, PollutionSourceId = 5; bool Averaged = true; measuredDatas.Add(new MeasuredData { Value = Convert.ToDecimal(value.Replace(".", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator)), DateTime = dateTimeServer, MeasuredParameterId = MeasuredParameterId, PollutionSourceId = PollutionSourceId, Averaged = Averaged }); } } catch { } } await client.DisconnectAsync(true); } return(measuredDatas); } catch (Exception ex) { return(measuredDatas); } }