您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 简单邮件传输协议SMTP封装类
简单邮件传输协议SMTP封装类在Internet上,Email是最流行的传输媒体。这篇文章包括两个协议:.POP3协议:POP3协议(邮政传输协议)就是指从Email服务器接收信件。我已经提交了一个封装POP3协议的类。该协议官方的描述你可查阅RFC1225。SMTP协议:SMTP(简单邮件传输协议)指发送邮件到它的目的地。有关SMTP协议的细节你可参考RCF821.我最新地贡献是封装了SMTP协议。我不能完全实现SMTP协议但你可用它在许多应用场合发送邮件。该类有若干方法,我选方法名同SMTP命令,所以你很容易理解。在该类中,我再一次使用了CSocket作为类成员,所以我能在线程中使用它.下面是该类的编码及注释:////////////////////////////////////////////////////////////////////////SMTP.h:interfacefortheCSMTPclass.////////////////////////////////////////////////////////////////////////#if!defined(AFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_)#defineAFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_#if_MSC_VER=1000#pragmaonce#endif//_MSC_VER=1000#defineCONNECTION_CHECK0#defineHELLO_CHECK1#defineMAIL_CHECK2#defineRCPT_CHECK3#defineDATA_START_CHECK4#defineDATA_END_CHECK5#defineQUIT_CHECK6#defineDATA_CHECK7classCSMTP{public:BOOLMail();//CStringGetErrorMessage();BOOLData(CStringSubject,CStringBody);CStringGetTo();BOOLSetTo(CStringto);CStringGetFrom();voidSetFrom(CStringfrom);BOOLMail(CStringfrom);BOOLDisconnect();CStringGetHost();voidSetHost(CStringHost);BOOLConnect(CStringHost,CStringMe);BOOLConnect();CSMTP();virtual~CSMTP();private:CStringGetError(CStringResponse);CStringm_ErrorMessage;BOOLCheckResponse(intType);intm_NoOfTo;CStringArraym_To;CStringm_From;CSocketm_SMTPServer;CStringm_Host;};#endif//!defined(AFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_)////////////////////////////////////////////////////////////////////////////SMTP.cpp:implementationoftheCSMTPclass.////////////////////////////////////////////////////////////////////////#includestdafx.h#includeMailSend.h#includeSMTP.h#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CSMTP::CSMTP(){m_NoOfTo=0;m_SMTPServer.Create();}CSMTP::~CSMTP(){m_SMTPServer.Close();}//ConnecttotheSMTPServerBOOLCSMTP::Connect(){returnConnect(m_Host,m_From);}//ConnecttotheSMTPServerBOOLCSMTP::Connect(CStringHost,CStringFrom){if(!m_SMTPServer.Connect(Host,25))//25forSMTPPort{m_ErrorMessage=_T(Servercannotbeconnected);returnFALSE;}else{if(CheckResponse(CONNECTION_CHECK)==FALSE)returnFALSE;charbuf[512];wsprintf(buf,HELO%s\r\n,(LPCSTR)From);m_SMTPServer.Send(buf,strlen(buf));if(CheckResponse(HELLO_CHECK)==FALSE)returnFALSE;elsereturnTRUE;returnTRUE;}}//SettingtheHostStringvoidCSMTP::SetHost(CStringHost){m_Host=Host;}//ReturingtheHostStringCStringCSMTP::GetHost(){returnm_Host;}//发送QUIT命令到SMTP服务器:BOOLCSMTP::Disconnect(){charbuf[256];wsprintf(buf,QUIT\r\n);m_SMTPServer.Send(buf,strlen(buf));if(CheckResponse(QUIT_CHECK)==FALSE)returnFALSE;elsereturnTRUE;}//发送MAIL命令到SMTP服务器:BOOLCSMTP::Mail(CStringfrom){charbuf[256];wsprintf(buf,MAILFrom:%s\r\n,(LPCSTR)from);m_SMTPServer.Send(buf,strlen(buf));if(CheckResponse(MAIL_CHECK)==FALSE)returnFALSE;elsereturnTRUE;}//SettingtheFromstringvoidCSMTP::SetFrom(CStringfrom){m_From=from;}//ReturingtheFromstringCStringCSMTP::GetFrom(){returnm_From;}//SettingtheTOstringBOOLCSMTP::SetTo(CStringto){charbuf[256];m_To.Add(to);//Savingvaleoftowsprintf(buf,RCPTTO:%s\r\n,(LPCSTR)to);m_SMTPServer.Send(buf,strlen(buf));if(CheckResponse(RCPT_CHECK)==FALSE)returnFALSE;elsereturnTRUE;}//ReturingtheTOstringCStringCSMTP::GetTo(){if(m_To.GetSize()=m_NoOfTo){m_NoOfTo++;returnm_To[m_NoOfTo-1];}elsereturn_T(NomoreToavailable);}//发送DATA命令到SMTP服务器:BOOLCSMTP::Data(CStringSubject,CStringBody){charbuf[256];wsprintf(buf,DATA\r\n);m_SMTPServer.Send(buf,strlen(buf));if(CheckResponse(DATA_CHECK)==FALSE)returnFALSE;else{wsprintf(buf,SUBJECT:%s\r\n,(LPCSTR)Subject);m_SMTPServer.Send(buf,strlen(buf));wsprintf(buf,%s\r\n,(LPCSTR)Body);m_SMTPServer.Send(buf,strlen(buf));wsprintf(buf,.\r\n);m_SMTPServer.Send(buf,strlen(buf));returnTRUE;}}//本方法检查服务器的响应:BOOLCSMTP::CheckResponse(intType){charbuf[1000];chartemp[3];for(inti=0;i512;i++)buf[i]='\0';//从服务器接收数据m_SMTPServer.Receive(buf,sizeof(buf));strncpy(temp,buf,3);inttemp2=atoi(temp);switch(Type){caseCONNECTION_CHECK:if(temp2!=220){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseHELLO_CHECK:if(temp2!=250){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseMAIL_CHECK:if(temp2!=250){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseRCPT_CHECK:if(temp2!=250){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseDATA_START_CHECK:if(temp2!=354){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseDATA_END_CHECK:if(temp2!=250){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseQUIT_CHECK:if(temp2!=221){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;caseDATA_CHECK:if(temp2!=354){m_ErrorMessage=GetError((LPCTSTR)buf);returnFALSE;}break;}returnTRUE;}//返回错误消息CStringCSMTP::GetErrorMessage(){returnm_ErrorMessage;}//按照错误号准备错误信息CStringCSMTP::GetError(CStringResponse){if(Response.Find(211))return_T(Systemstatusorsystemhelpreply);if(Response.Find(214))retu
本文标题:简单邮件传输协议SMTP封装类
链接地址:https://www.777doc.com/doc-2096078 .html