在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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务