void GetHeader(string sMessageUid, string sPartNumber, ArrayList asMessageHeader)
{
asMessageHeader.Clear();
ImapResponseEnum eImapResponse = ImapResponseEnum.IMAP_SUCCESS_RESPONSE;
string sCommandSuffix = "";
if (sPartNumber == "0")
{
sCommandSuffix = sMessageUid + " " + "BODY[HEADER]" ;
}
else
{
sCommandSuffix = sMessageUid + " " + "BODY[" + sPartNumber + ".MIME]";
}
string sCommandString = IMAP_UIDFETCH_COMMAND + " " + sCommandSuffix + IMAP_COMMAND_EOL ;
try
{
//-----------------------
// SEND SEARCH REQUEST
ArrayList asResultArray = new ArrayList();
eImapResponse = SendAndReceive(sCommandString, ref asResultArray);
if (eImapResponse == ImapResponseEnum.IMAP_SUCCESS_RESPONSE)
{
//-------------------------
// PARSE RESPONSE
string sKey = "";
string sValue = "";
string sLastLine = IMAP_SERVER_RESPONSE_OK;
foreach (string sLine in asResultArray)
{
if (sLine.Length <= 0 ||
sLine.StartsWith(IMAP_UNTAGGED_RESPONSE_PREFIX) ||
sLine == ")" )
{
continue;
}
else if(sLine.StartsWith(sLastLine))
{
break;
}
int nPos = sLine.IndexOf(" ");
if (nPos != -1)
{
string sTmpLine = sLine.Substring(0, nPos);
nPos = sTmpLine.IndexOf(":");
}
if (nPos != -1)
{
if (sKey.Length > 0 )
{
asMessageHeader.Add(sKey);
asMessageHeader.Add(sValue);
}
sKey = sLine.Substring(0, nPos).Trim();
sValue = sLine.Substring(nPos + 1).Trim();
}
else
{
sValue += sLine.Trim();
}
}
if (sKey.Length > 0 )
{
asMessageHeader.Add(sKey);
asMessageHeader.Add(sValue);
}
}
else
throw new ImapException(ImapException.ImapErrorEnum.IMAP_ERR_FETCHMSG, sCommandSuffix );
}
catch (ImapException e)
{
LogOut();
throw e;
}
}