login about faq

I am working on an application to use Chilkat IMAP email component and I came across the function CheckForNewEmail() that will return a message set of new UIDLs. I am not very clear on how to use this function since it doesn’t return anything in my case. If I use the GetAllUids() function its returns {1:3} whereas with CheckForNewEmail() I see {-1}. I have created a new gmail account here and have 3 emails which are all new and unread. Below is my sample implementation in VB.net. Is my call to CheckForNewEmail() correct here ? Please help me understand if I am not doing it right.

Dim ChilkatUIDLs_GetAllUids As New Chilkat.MessageSet
Dim ChilkatUIDLs_CheckForNewEmail As New Chilkat.MessageSet

Try 'select an IMAP mailbox Dim isMailBoxSelected As Boolean = False isMailBoxSelected = SelectMailbox("Inbox")

If isMailBoxSelected Then
    ChilkatUIDLs_GetAllUids = Imap.GetAllUids()    ' returns {1:3}
    ChilkatUIDLs_CheckForNewEmail = Imap.CheckForNewEmail() ' returns {-1}
End If

Catch ex As Exception Throw New Exception("GetImapMailUIDLs " & Username & ex.Message & Imap.LastErrorText) End Try

Any help on this will be greatly appreciated.

asked Mar 22 '17 at 10:46

chilkat's gravatar image

chilkat ♦♦

edited Mar 22 '17 at 10:47

The CheckForNewEmail method is for checking for emails with the RECENT flag set, or emails that have a UID greater than the UIDNEXT value. These would be emails that have arrived in the time period after the mailbox has been selected. In the example snippet above, the CheckForNewEmail happens (essentially) right after the mailbox is selected. The idea behind CheckForNewEmail is that you'll have an open/active session with a selected mailbox, and at some later point in time the app wants to see if any new emails have arrived since the mailbox was selected. It can call CheckForNewEmail to get the UIDs of new emails.

It's good to understand more clearly the meaning of the RECENT flag. Here is the explanation from the IMAP RFC:

Message is "recently" arrived in this mailbox. This session is the first session to have been notified about this message; if the session is read-write, subsequent sessions will not see Recent set for this message. This flag can not be altered by the client.

If it is not possible to determine whether or not this session is the first session to be notified about a message, then that message SHOULD be considered recent.

If multiple connections have the same mailbox selected simultaneously, it is undefined which of these connections will see newly-arrived messages with Recent set and which will see it without Recent set.

CheckForEmail does two things to detect new email:

  1. Closes and re-selects the currently selected mailbox. If new emails had arrived, the new UIDNEXT value will be a higher number.
  2. Issues a SEARCH command to find emails greater than the old UIDNEXT and/or those with the RECENT flag set.

Your app would only call CheckForNewEmail after the currently selected mailbox has been selected for some period of time (the amount of elapsed time depends on how frequently you expect to receive email..)


answered Mar 22 '17 at 10:59

chilkat's gravatar image

chilkat ♦♦

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here



Answers and Comments

Markdown Basics

  • *italic* or __italic__
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported



Asked: Mar 22 '17 at 10:46

Seen: 1,537 times

Last updated: Mar 22 '17 at 10:59

powered by OSQA