存储邮件信息的结构:
struct ContentHeader{
int nType;//=(1)0 text/plain, =(1)1 text/html, =(1)2 maybe attach
AnsiString strTransferEncoding;
AnsiString strContent;
AnsiString strFileName;//for attachment
};
处理每一行的函数,处理完成存入结构体ContehtHeader,并存入链表CHList( TList* )
void __fastcall TRecvMailThread::DealLine(char* line, int len)
{
int pos;
AnsiString strLine( line );
AnsiString strTemp( line );
strLine = strLine.LowerCase();
switch( nItemKind )
{
case 0 :
if( strLine == "" && nItems >= 1 )//第一部分结束
{
nItemKind = 1;//进入下一部分
break;
}
if( ( pos = strLine.AnsiPos( "from:" ) ) == 1 )
{
if( strFrom == "" )
{
strFrom = strTemp.SubString( pos + 5, len - pos - 4 );
if( strFrom[ 1 ] == 0x20 )
strFrom = strFrom.SubString( 2, strFrom.Length() - 1 );
nItems ++;
}
}
else if( ( pos = strLine.AnsiPos( "to:" ) ) == 1 )
{
if( strTo == "" )
{
strTo = strTemp.SubString( pos + 3, len - pos - 2 );
if( strTo[ 1 ] == 0x20 )
strTo = strTo.SubString( 2, strTo.Length() - 1 );
nItems ++;
}
}
else if( ( pos = strLine.AnsiPos( "subject:" ) ) == 1 )
{
if( strSubject == "" )
{
strSubject = strTemp.SubString( pos + 8, len - pos - 7 );
if( strSubject[ 1 ] == 0x20 )
strSubject = strSubject.SubString( 2, strSubject.Length() - 1 );
nItems ++;
}
}
else if( ( pos = strLine.AnsiPos( "content-type: multipart" ) ) != 0 )
{
if( ( pos = strLine.AnsiPos( "boundary=" ) ) != 0 )
{
strNormalBoundary = strTemp.SubString( pos + 9, len - pos - 8 );
if( strNormalBoundary[ 1 ] == '/"' )
strNormalBoundary = strNor