您好,欢迎来到智榕旅游。
搜索
您的当前位置:首页POP3协议类库

POP3协议类库

来源:智榕旅游
POP3协议类库

在Internet中,e_mail是用途最广的应用程序。通常e_mail系统使用SMTP协议作为邮件

发送协议,使用POP3作为邮件接收协议。在WINDOWS环境中我们可以使用MAPI作e_mail操

作,但它不能直接连接到e_mail服务器。

这里我们提供了一个POP 3 协议类。在这个类中我们使用CSocket作为类变量, 目的是

我们能在线程中使用它。 下面是代码源程序。

/*--------------------------------------------------------------------

Pop.h : main header file for the POP application

------------------------------------------------------------------*/

#if !defined(AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_)

#define AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_

#define CONNECTION_CHECK 0 #define USER_CHECK 1 #define PASSWORD_CHECK 2 #define QUIT_CHECK 3 #define DELETE_CHECK 4 #define RSET_CHECK 5 #define STAT_CHECK 6 #define NOOP_CHECK 7 #define LIST_CHECK 8 #define RETR_CHECK 9

///////////////////////////////////////////////////////////////////////

class CPop {

public:

BOOL List();

CWordArraym_SizeOfMsg; CStringGetErrorMessage();

// If there is any error this will return it method

CStringGetPassword(); // Getting Password stored in class

void SetPassword(CString& Password); // Setting Password in class CStringGetUser(); // Getting user name stored in class void SetUser(CString& User); // Setting user name in class

CStringGetHost(); // Getting Host name (email server name) stored in class void SetHost(CString& Host); // Setting Host name (email server name) in class

BOOL Connect(); // Connecting to email server

intGetTotalMailSize(); // it returns the Total Mail Size intGetNumberOfMails(); // It return the number of mails CStringGetMsgContents();

BOOL Statistics(); // issue the STAT command on email server

BOOL Retrieve(intMsgNumber); // Getting any particular mail message BOOL Reset(); // issue the reset command on email server

intGetMessageSize(intMsgNumber); // Return a size of any particular mail

BOOL Noop(); // issue the NOOP command on email server

BOOL Disconnect(); // issue the QUIT command on email server BOOL Delete(int&MsgNumber); // Deleteing a particular message from email server

BOOL Connect(CString& Host, CString& User, CString& Password); CPop();

virtual ~CPop();

private:

CStringm_ErrorMessage;

BOOL CheckResponse(intResponseType); CStringm_Password; CStringm_User; CStringm_Host;

CStringm_MsgContents; intm_TotalSize; intm_NumberMail; CSocketm_PopServer; };

/#endif

// !defined(AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_)

/*----------------------------------------------------------------

// Pop.cpp : Defines the class behaviors for the application.

------------------------------------------------------------------*/

#include \"stdafx.h\" #include \"Pop.h\"

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

//////////////////////////////////////////////////////////////////// // CPop Class

///////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////// // Construction/Destruction

//////////////////////////////////////////////////////////////////

CPop::CPop() {

m_PopServer.Create(); }

//{4EEC1C91-6BE1-11d1-8824-00001C302581}

CPop::~CPop() {

m_PopServer.Close(); }

BOOL CPop::Connect(CString& Host, CString& User, CString& Password) {

char buf [512];

if (!m_PopServer.Connect(Host,110)) // 110 Pop3 Port {

m_ErrorMessage = _T(\"Server cannot be connected\"); return FALSE; } else {

if(CheckResponse(CONNECTION_CHECK)==FALSE) return FALSE;

wsprintf (buf, \"USER %s\\r\\n\m_PopServer.Send(buf, strlen (buf)); if(CheckResponse(USER_CHECK)==FALSE) return FALSE;

wsprintf (buf, \"PASS %s\\r\\n\m_PopServer.Send(buf, strlen (buf));

if (CheckResponse(PASSWORD_CHECK)==FALSE) return FALSE;

return TRUE; } }

BOOL CPop::Delete(int&MsgNumber) {

char buf [512];

wsprintf (buf, \"DELE %d\\r\\n\m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(DELETE_CHECK)==FALSE) return FALSE; else

return TRUE; }

BOOL CPop::Disconnect() {

char buf [512];

wsprintf (buf, \"QUIT \\r\\n\");

m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(QUIT_CHECK)==FALSE) return FALSE; else

return TRUE; }

BOOL CPop::Noop() {

char buf [512];

wsprintf (buf, \"NOOP \\r\\n\");

m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(NOOP_CHECK)==FALSE) return FALSE; else

return TRUE; }

// Return the Msg Size for given msg number intCPop::GetMessageSize(intMsgNumber) {

if(m_SizeOfMsg.GetSize() < MsgNumber+1) return 0; else

return m_SizeOfMsg[MsgNumber+1]; }

BOOL CPop::Reset() {

char buf [512];

wsprintf (buf, \"RSET \\r\\n\");

m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(RSET_CHECK)==FALSE) return FALSE; else

return TRUE; }

// MsgContents will hold the msg body BOOL CPop::Retrieve(intMsgNumber) {

char buf [512];

wsprintf (buf, \"RETR %d\\r\\n\m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(RETR_CHECK)==FALSE) return FALSE; else

return TRUE; }

BOOL CPop::Statistics() {

char buf [512];

wsprintf (buf, \"STAT \\r\\n\");

m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(STAT_CHECK)==FALSE) return FALSE; else

return TRUE; }

CStringCPop::GetMsgContents() {

return m_MsgContents; }

intCPop::GetNumberOfMails() {

return m_NumberMail; }

intCPop::GetTotalMailSize() {

return m_TotalSize; }

BOOL CPop::Connect() {

Connect(m_Host, m_User, m_Password); return TRUE; }

void CPop::SetHost(CString& Host) {

m_Host = Host; }

CStringCPop::GetHost() {

return m_Host; }

void CPop::SetUser(CString& User) {

m_User = User;

}

CStringCPop::GetUser() {

return m_User; }

void CPop::SetPassword(CString& Password) {

m_Password = Password; }

CStringCPop::GetPassword() {

return m_Password; }

BOOL CPop::CheckResponse(intResponseType) {

char buf [1000];

for (int i=0;i<512;i++) buf[i]='\\0';

m_PopServer.Receive(buf, sizeof(buf));

switch (ResponseType) {

case CONNECTION_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Bad Connection\"); return FALSE; }

break;

case USER_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Bad User Name\"); return FALSE; }

break;

case PASSWORD_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Bad Password Name\"); return FALSE; }

break;

case QUIT_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during QUIT\"); return FALSE; }

break;

case DELETE_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during DELE\"); return FALSE; }

break;

case RSET_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during RSET\"); return FALSE; }

break;

case STAT_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during STAT\"); return FALSE; } else {

BOOL EmailNumber = TRUE;

for (char *p = buf; *p != '\\0'; p++) {

if (*p == '\' || *p == ' ') {

if(EmailNumber == TRUE) {

m_NumberMail = atoi(p); EmailNumber = FALSE;

} else {

m_TotalSize = atoi(p); return TRUE; } } } }

break;

case NOOP_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during NOOP\"); return FALSE; }

break;

case LIST_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during LIST\"); return FALSE; } else {

m_PopServer.Receive(buf, sizeof(buf));

for (char *p = buf; *p != '.'; p++) if (*p == '\' || *p == ' ') m_SizeOfMsg.Add(atoi(p)); }

break;

case RETR_CHECK:

if (strnicmp(buf,\"-ERR\ {

m_ErrorMessage = _T(\"Error occured during RETR\"); return FALSE; } else {

char temp[9000];

m_PopServer.Receive(temp, sizeof(temp));

m_MsgContents = temp; }

break; }

return TRUE; }

CStringCPop::GetErrorMessage() {

return m_ErrorMessage; }

BOOL CPop::List() {

char buf [512];

wsprintf (buf, \"LIST \\r\\n\");

m_PopServer.Send(buf, strlen (buf)); if (CheckResponse(LIST_CHECK)==FALSE) return FALSE; else

return TRUE; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- zrrp.cn 版权所有 赣ICP备2024042808号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务