Joshi.Utils.Imap.Imap.ExamineFolder C# (CSharp) Method

ExamineFolder() public method

Examine the sFolder/mailbox after login
public ExamineFolder ( string sFolder ) : void
sFolder string Mailbox folder
return void
        public void ExamineFolder(string sFolder)
        {
            if (!m_bIsLoggedIn)
            {
                try
                {
                    Restore(false);
                }
                catch (ImapException e)
                {
                    if (e.Type != ImapException.ImapErrorEnum.IMAP_ERR_INSUFFICIENT_DATA)
                        throw e;

                    throw new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_NOTCONNECTED);
                }
            }
            ImapResponseEnum eImapResponse = ImapResponseEnum.IMAP_SUCCESS_RESPONSE;
            ImapException e_examine   = new ImapException (ImapException.ImapErrorEnum.IMAP_ERR_EXAMINE, sFolder);
            ImapException e_invalidparam = new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_INVALIDPARAM);
            if (sFolder.Length == 0)
            {
                throw e_invalidparam;
            }
            if (m_bIsFolderExamined)
            {
                if (m_sMailboxName == sFolder)
                {
                    Log(LogTypeEnum.INFO,"Folder is already selected");
                    return;
                }
                else m_bIsFolderExamined = false;
            }
            ArrayList asResultArray = new ArrayList();
            string sCommand = IMAP_EXAMINE_COMMAND;
            sCommand += " " + sFolder +IMAP_COMMAND_EOL;
            try
            {
                eImapResponse = SendAndReceive(sCommand, ref asResultArray);
                if (eImapResponse == ImapResponseEnum.IMAP_SUCCESS_RESPONSE)
                {
                    m_sMailboxName = sFolder;
                    m_bIsFolderExamined = true;
                }
                else throw e_examine;
            }
            catch (Exception e)
            {
                throw e;
            }
            //-------------------------
            // PARSE RESPONSE

            bool bResult = false;
            foreach (string sLine in  asResultArray)
            {
                // If this is an unsolicited response starting with '*'
                if (sLine.IndexOf(IMAP_UNTAGGED_RESPONSE_PREFIX) != -1)
                {
                    // parse the line by space
                    string [] asTokens;
                    asTokens = sLine.Split(' ');
                    if (asTokens[2] == "EXISTS")
                    {
                        // The line will look like "* 2 EXISTS"
                        m_nTotalMessages = Convert.ToInt32(asTokens[1]);
                    }
                    else if (asTokens[2] == "RECENT")
                    {
                        // The line will look like "* 2 RECENT"
                        m_nRecentMessages = Convert.ToInt32(asTokens[1]);
                    }
                    else if (asTokens[2] == "[UNSEEN")
                    {
                        // The line will look like "* OK [UNSEEN 2]"
                        string sUIDPart = asTokens[3].Substring(0, asTokens[3].Length-1);
                        m_nFirstUnSeenMsgUID = Convert.ToInt32(sUIDPart);
                    }
                }
                    // If this line looks like "<command-tag> OK ..."
                else if (sLine.IndexOf(IMAP_SERVER_RESPONSE_OK) != -1)
                {
                    bResult = true;
                    break;
                }
            }

            if (!bResult)
                throw e_examine;

            string sLogStr = "TotalMessages[" + m_nTotalMessages.ToString() + "] ,";
            sLogStr += "RecentMessages[" + m_nRecentMessages.ToString() + "] ,";
            if (m_nFirstUnSeenMsgUID > 0 )
                sLogStr += "FirstUnSeenMsgUID[" + m_nFirstUnSeenMsgUID.ToString() + "] ,";
            //Log(LogTypeEnum.INFO, sLogStr);
        }

Usage Example

		public override Boolean Check ()
		{
			Imap imap = new Imap();
			imap.Login(ServerAddress, Email, Password);

			imap.ExamineFolder("Inbox");

			ArrayList messages = new ArrayList();
			imap.SearchMessage(new string[] { "UNSEEN" }, true, messages);

			for (int i = messages.Count - 1; i >= 0; i--)
			{
				if ((string)messages[i] == "")
					messages.RemoveAt(i);
			}

			return messages.Count > 0;
		}