邮件解析(源码)

这段代码展示了如何处理邮件的各个部分,如from、to、subject和内容。通过解析邮件头信息,存储到ContentHeader结构体中,并利用链表CHList进行管理。主要涉及到邮件的类型识别、内容编码、附件处理等。
摘要由CSDN通过智能技术生成

存储邮件信息的结构:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值