public void SelectFolder(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,e.Message); }
}
ImapResponseEnum eImapResponse = ImapResponseEnum.IMAP_SUCCESS_RESPONSE;
ImapException e_select = new ImapException (ImapException.ImapErrorEnum.IMAP_ERR_SELECT, sFolder);
ImapException e_invalidparam = new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_INVALIDPARAM);
if (sFolder.Length == 0)
{
throw e_invalidparam;
}
if (m_bIsFolderSelected)
{
if (m_sMailboxName == sFolder)
{
Log(LogTypeEnum.INFO,"Folder is already selected");
return ;
}
else m_bIsFolderSelected = false;
}
ArrayList asResultArray = new ArrayList();
string sCommand = IMAP_SELECT_COMMAND;
sCommand += " " + sFolder +IMAP_COMMAND_EOL;
try
{
eImapResponse = SendAndReceive(sCommand, ref asResultArray);
if (eImapResponse == ImapResponseEnum.IMAP_SUCCESS_RESPONSE)
{
m_sMailboxName = sFolder;
m_bIsFolderSelected = true;
}
else throw e_select;
}
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_select;
string sLogStr = "TotalMessages[" + m_nTotalMessages.ToString() + "] ,";
sLogStr += "RecentMessages[" + m_nRecentMessages.ToString() + "] ,";
if (m_nFirstUnSeenMsgUID > 0 )
sLogStr += "FirstUnSeenMsgUID[" + m_nFirstUnSeenMsgUID.ToString() + "] ,";
//Log(LogTypeEnum.INFO, sLogStr);
}