I’m developing an email client for my company, and I’ve received it as explained in the following link: Working with Messages from IMAP Server|Documentation Server
Code sample:
using (var imapClient = new ImapClient(contaEmail.ServidorEntrada, contaEmail.PortaEntrada))
{
imapClient.Username = contaEmail.Login;
imapClient.Password = contaEmail.RecuperarSenha();
var evnt = new ManualResetEvent(false);
while (true)
{
var builder = new ImapQueryBuilder();
builder.InternalDate.Greater(DataUltimaSincronizacao.ToUniversalTime(), DateComparisonType.ByDateTime);
var query = builder.GetQuery();
var pageInfo = imapClient.ListMessagesByPage(ImapFolderInfo.InBox, query, 15);
var messages = pageInfo.Items.ToList();
while (!pageInfo.LastPage)
{
pageInfo = imapClient.ListMessagesByPage(ImapFolderInfo.InBox, query, pageInfo.NextPage);
messages.AddRange(pageInfo.Items);
}
if (messages.Any())
{
foreach (var imapMessageInfo in messages)
{
var mailMessage = imapClient.FetchMessage(imapMessageInfo.SequenceNumber);
OnRecebeuEmail(mailMessage, imapMessageInfo.InternalDate, imapMessageInfo.IsRead);
}
}
evnt.WaitOne(TimeSpan.FromMinutes(1));
evnt.Reset();
}
}
The problem: If I receive an email after the loop has started, it is not retrieved in the ListMessagesByPage, only if I close the thread and start another, which subsequently rebuilds the ImapClient.
I simulated this in version 17.11 and 18.2.
- This error occurs in both Imap and Pop3.
- I’m still not using StartMonitoring because I have another bug open with regard to this case.