pop3.cpp

来自「Visual_C++.NET实用编程百例」· C++ 代码 · 共 134 行

CPP
134
字号
#include "StdAfx.h"
#include ".\pop3.h"
#include "MAPI.h"

#define CONNECTION_CHECK 1
#define USER_CHECK 2
#define PASSWORD_CHECK 3
#define STAT_CHECK 4

CPOP3::CPOP3(void)
: m_nNum(0)
, m_strErr(_T(""))
{
	m_Server.Create();
}

CPOP3::~CPOP3(void)
{
	m_Server.Close ();
}

BOOL CPOP3::Connect(void)
{
	return 0;
}

int CPOP3::GetNumofMail(void)
{
	return m_nNum;
}

BOOL CPOP3::Disconnect(void)
{
	return 0;
}

BOOL CPOP3::Connect(CString& host, CString& user, CString& pwd)
{
	char buf[512];
	if(!m_Server.Connect (host,110))
	{
		m_strErr=_T("不能连接到邮件服务器");
		return FALSE;
	}
	else
	{
		if(CheckResponse(CONNECTION_CHECK)==FALSE)
			return FALSE;
		wsprintf(buf,"USER%s\r\n",(LPCSTR)user);
		m_Server.Send (buf,(int)strlen(buf));
		if(CheckResponse(USER_CHECK)==FALSE)
			return FALSE;
		wsprintf(buf,"PASS%s\r\n",(LPCSTR)pwd);
		m_Server.Send (buf,(int)strlen(buf));
		if(CheckResponse(PASSWORD_CHECK)==FALSE)
			return FALSE;
		return TRUE;
	}
}

BOOL CPOP3::CheckResponse(int respType)
{
	char buf[256]="";
	m_Server.Receive (buf,sizeof(buf));
	switch(respType)
	{
	case CONNECTION_CHECK:
		if(strnicmp(buf,"-ERR",4)==0)
		{
			m_strErr=_T("错误的连接!");
			return FALSE;
		}
		break;
	case USER_CHECK:
		if(strnicmp(buf,"-ERR",4)==0)
		{
			m_strErr=_T("错误的用户名!");
			return FALSE;
		}
		break;
	case PASSWORD_CHECK:
		if(strnicmp(buf,"-ERR",4)==0)
		{
			m_strErr=_T("密码错误!");
			return FALSE;
		}
		break;
	case STAT_CHECK:
		if(strnicmp(buf,"-ERR",4)==0)
		{
			m_strErr=_T("STAT命令错误!");
			return FALSE;
		}
		else
		{
			BOOL mailNum=TRUE;
			for(char* p=buf;*p!='\0';p++)
			{
				if(*p=='\t'||*p==' ')
				{
					if(mailNum==TRUE)
					{
						m_nNum=atoi(p);
						mailNum=FALSE;
					}
					else
					{
						m_nNum=atoi(p);
						return TRUE;
					}
				}
			}
		}
		break;
	}
	return 0;
}

BOOL CPOP3::Statistics(void)
{
	char buf[512];
	wsprintf(buf,"STAT\r\n");
	m_Server.Send (buf,(int)strlen(buf));
	if(CheckResponse(STAT_CHECK)==FALSE)
		return FALSE;
	else
		return TRUE;
}

CString CPOP3::GetErrMsg(void)
{
	return m_strErr;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?