POP3协议封装类

  目前互连网上,EMAIL的使用是越来越广泛了。在所有的TCP连接线路中,大概有一半的线路是用来收发EMAIL的。因此,许多网络应用程序要想离开POP3协议是不可能的。

  而且,很多EMAIL系统都是使用SMTP协议来作为发送协议,而POP3协议来作为接受协议。关于这2个协议的许多资料,你可以看一下RCF821(关于SMTP的)和RCF1225(关于POP3的)。虽然在WINDOWS操作系统中,有一个叫MAPI应用程序是来管理EMAIL的,但是它的功能还不够强大,不足以直接处理一些EMAIL服务。所以,我写了一个有关于POP3协议的C++类,在这个类中我还使用了CSocket作为一个类成员(这好象有点不可想象),这样的话呢,我们可以在连接的时候使用它。并且,该POP类使用的一些功能类似于POP3协议中的一些命令。下面就代码:

/*--------------------------------------------------------------------
Pop.h:mainheaderfileforthePOPapplication
-----------------------------------------------------------------------*/
#if!defined(AFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_)
#defineAFX_POP_H__A44B38B6_697C_11D1_881E_00001C302581__INCLUDED_
#defineCONNECTION_CHECK0
#defineUSER_CHECK1
#definePASSWORD_CHECK2
#defineQUIT_CHECK3
#defineDELETE_CHECK4
#defineRSET_CHECK5
#defineSTAT_CHECK6
#defineNOOP_CHECK7
#defineLIST_CHECK8
#defineRETR_CHECK9
/////////////////////////////////////////////////////////////////////////////
classCPop
{
public:
BOOLList();
CWordArraym_SizeOfMsg;
CStringGetErrorMessage();//Ifthereisanyerrorthiswillreturnitmethod
CStringGetPassword();//GettingPasswordstoredinclass
voidSetPassword(CString&Password);//SettingPasswordinclass
CStringGetUser();//Gettingusernamestoredinclass
voidSetUser(CString&User);//Settingusernameinclass
CStringGetHost();//GettingHostname(emailservername)storedinclass
voidSetHost(CString&Host);//SettingHostname(emailservername)inclass
BOOLConnect();//Connectingtoemailserver
intGetTotalMailSize();//itreturnstheTotalMailSize
intGetNumberOfMails();//Itreturnthenumberofmails
CStringGetMsgContents();
BOOLStatistics();//issuetheSTATcommandonemailserver
BOOLRetrieve(intMsgNumber);//Gettinganyparticularmailmessage
BOOLReset();//issuetheresetcommandonemailserver
intGetMessageSize(intMsgNumber);//Returnasizeofanyparticularmail
BOOLNoop();//issuetheNOOPcommandonemailserver
BOOLDisconnect();//issuetheQUITcommandonemailserver
BOOLDelete(int&MsgNumber);//Deleteingaparticularmessagefromemailserver
BOOLConnect(CString&Host,CString&User,CString&Password);
CPop();
virtual~CPop();
private:
CStringm_ErrorMessage;
BOOLCheckResponse(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:Definestheclassbehaviorsfortheapplication.
---------------------------------------------------------------------------------------------------*/
#include"stdafx.h"
#include"Pop.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
////////////////////////////////////////////////////////////////////
//CPopClass
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//Construction/Destruction
//////////////////////////////////////////////////////////////////////
CPop::CPop()
{
m_PopServer.Create();
}
//{4EEC1C91-6BE1-11d1-8824-00001C302581}
CPop::~CPop()
{
m_PopServer.Close();
}
BOOLCPop::Connect(CString&Host,CString&User,CString&Password)
{
charbuf[512];
if(!m_PopServer.Connect(Host,110))//110Pop3Port
{
m_ErrorMessage=_T("Servercannotbeconnected");
returnFALSE;
}
else
{
if(CheckResponse(CONNECTION_CHECK)==FALSE)
returnFALSE;
wsprintf(buf,"USER%s",(LPCSTR)User);
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(USER_CHECK)==FALSE)
returnFALSE;
wsprintf(buf,"PASS%s",(LPCSTR)Password);
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(PASSWORD_CHECK)==FALSE)
returnFALSE;
returnTRUE;
}
}
BOOLCPop::Delete(int&MsgNumber)
{
charbuf[512];
wsprintf(buf,"DELE%d",MsgNumber);
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(DELETE_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
BOOLCPop::Disconnect()
{
charbuf[512];
wsprintf(buf,"QUIT");
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(QUIT_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
BOOLCPop::Noop()
{
charbuf[512];
wsprintf(buf,"NOOP");
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(NOOP_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
//ReturntheMsgSizeforgivenmsgnumber
intCPop::GetMessageSize(intMsgNumber)
{
if(m_SizeOfMsg.GetSize()<MsgNumber+1)
return0;
else
returnm_SizeOfMsg[MsgNumber+1];
}
BOOLCPop::Reset()
{
charbuf[512];
wsprintf(buf,"RSET");
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(RSET_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
//MsgContentswillholdthemsgbody
BOOLCPop::Retrieve(intMsgNumber)
{
charbuf[512];
wsprintf(buf,"RETR%d",MsgNumber);
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(RETR_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
BOOLCPop::Statistics()
{
charbuf[512];
wsprintf(buf,"STAT");
m_PopServer.Send(buf,strlen(buf));
if(CheckResponse(STAT_CHECK)==FALSE)
returnFALSE;
else
returnTRUE;
}
CStringCPop::GetMsgContents()
{
returnm_MsgContents;
}
intCPop::GetNumberOfMails()
{
returnm_NumberMail;
}
intCPop::GetTotalMailSize()
{
returnm_TotalSize;
}
BOOLCPop::Connect()
{
Connect(m_Host,m_User,m_Password);
returnTRUE;
}
voidCPop::SetHost(CString&Host)
{
m_Host=Host;
}
CStringCPop::GetHost()
{
returnm_Host;
}
voidCPop::SetUser(CString&User)
{
m_User=User;
}
CStringCPop::GetUser()
{
returnm_User;
}
voidCPop::SetPassword(CString&Password)
{
m_Password=Password;
}
CStringCPop::GetPassword()
{
returnm_Password;
}
BOOLCPop::CheckResponse(intResponseType)
{
charbuf[1000];
for(inti=0;i<512;i++)
buf[i]='

时间: 2024-10-24 16:47:45

POP3协议封装类的相关文章

怎样接收电子邮件(POP3协议简介)

在Internet,POP3(PostOfficeProtocol3)协议通常被用来接收电子邮件.这个协议很容易学,因为它只包含12个命令(其中有3个你完全可以忽略它们的存在).这些命令被客户端计算机用来发送给远程服务器.反过来,服务器返回给客户端计算机两个回应代码.如果你还没有看本站另一篇文章-"WinsockTerminal示例程序"的话,请先阅读那篇文章,因为你需要那个程序来做实验. 运行示例程序,单击工具栏上的"Connectto"按钮.在弹出的对话框中输入

POP3协议命令原始码及工作原理

一 简介: 1. POP适用于C/S结构的脱机模型的电子邮件协议,目前已发展到第三版,称POP3.脱机 模型即不能在线操作,不像IMAP4(netscape支持IMAP4) 2. 当客户机与服务器连接并查询新电子邮件时,被该客户机指定的所有将被下载的邮件 都将被程序下载到客户机,下载后,电子邮件客户机就可以删除或修改任意邮件,而无需与电子邮件服务器进一步交互. 3. POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码 表示. 服务器响应是由一个单独的命令行

JavaMail学习笔记(四)、使用POP3协议接收并解析电子邮件(全)

package org.yangxin.study.jm; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream;

关于mapi、pop3协议、smtp协议的问题!请高手指点!!!

问题描述 1.请问MAPI是邮件协议还是函数接口,如果是协议的话能抓包看见吗?2.如果它是协议如何设置exchange服务器我才能抓到数据包?3.mapi和pop3协议,smtp协议有什么关系可以接发邮件不用pop3和smtp吗?4.MAPI可以优化吗?应该怎么优化? 解决方案 解决方案二:1.MAPI接口是由微软公司提供的一系列供使用者开发Mail.Scheduling.bulletinboard.communication程序的编程接口.2.3.有个imap协议,与pop3类似,也是收邮件用

pop3-求教,C# 利用POP3协议 接收指定的发件人邮件,如何实现?请代码示意,谢谢!

问题描述 求教,C# 利用POP3协议 接收指定的发件人邮件,如何实现?请代码示意,谢谢! C# 利用POP3协议 接收指定的发件人邮件,如何实现? 以雅虎邮箱为例,POP3服务器地址:pop.mail.yahoo.com 端口:995 登录方式:SSl加密登录: 一个邮箱里面有几百封不同发件人的邮件(全部下载太耽误时间),我只想收取指定发件人的邮件内容,该如何做? 解决方案 (转载)用pop3 c#接收邮件C#实现POP3邮件接收程序实现POP3邮件接收程序[C#] 解决方案二: http:/

Pop3协议的原理

这几天搞pop3接受邮件,现在困在邮件解码这里,不过还顺便总结下心得 (1) POP3命令由一个命令和一些参数组成.所有命令以一个CRLF对结束 (2) 命令和参数由可打印的ASCII字符组成,它们之间由空格间隔 如user username(注意,连上去后,有时要大写USER,有时要小写user)(3) POP3响应由一个状态码("确定" ("+OK")和"失败" ("-ERR")) 和一个可能跟有附加信息的命令组成.所有响

发布自己写的Pop3协议组件

测试代码很简单如下: using System;using NMail.Client;using NMail.Mail; namespace ConsoleTestNMail{    class Demo    {        [STAThread]        static void Main(string[] args)        {            //构造            //-> 服务器地址 端口 用户名 密码 服务器验证方式(Pop3或者APOP)        

简单邮件传输协议SMTP封装类

在Internet上,Email是最流行的传输媒体.这篇文章包括两个协议:. POP 3 协议: POP3协议(邮政传输协议)就是指从Email服务器接收信件.我已经提交了一个封装POP3协议的类.该协议官方的描述你可查阅RFC1225. SMTP协议: SMTP (简单邮件传输协议) 指发送邮件到它的目的地. 有关SMTP 协议的细节你可参考RCF 821 .我最新地贡献是封装了SMTP协议.我不能完全实现 SMTP协议但你可用它在许多应用场合发送邮件.该类有若干方法,我选方法名同SMTP命令

阿里云企业邮箱 在Foxmail 7.0上POP3/IMAP协议设置方法

Foxmail 7.0 POP3/IMAP 设置方法如下: 1.单击 工具 > 账号管理 > 新建 ,填写您的邮件地址,单击 下一步 ,如图: 2.邮箱类型选择 POP3 或 IMAP ,输入密码后再进行下一步,如图: 3.设置 POP3 或 IMAP 协议,勾选 发送服务器要求身份验证 ,下面以 POP3 协议设置为例: POP3协议设置: 接收邮件服务器:pop3.mxhichina.com 或 pop3.您的域名,端口:110 发送邮件服务器:smtp.mxhichina.com或smt