c++使用POP协议接收以及解析邮件

前言

之前做了邮件的接收和解析的项目,接触到了邮件协议,在此根据网上的一些资料整理总结一下.本文有稍微有一点点长,各位请耐心.

目录

  1. 三大邮件协议简介
  2. POP协议详解
  3. 实例
一.三大邮件协议简介

说到邮件接收,首先需要知道常用的邮件协议,常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍。详细资料网上有很多,有兴趣的可以查查.

1.1 SMTP协议

SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
SMTP已是事实上的E-Mail传输的标准。

1.2 POP3协议

POP邮局协议负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务之一:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。POP协议支持多用户互联网邮件扩展,后者允许用户在电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,包括图片和声音文件等。在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,不在服务器上保留。
POP3(Post Office Protocol 3)即邮局协议的第3个版本,是因特网电子邮件的第一个离线协议标准。

1.3 IMAP4协议

互联网信息访问协议(IMAP)是一种优于POP的新协议。和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但IMAP克服了POP的一些缺点。例如,它可以决定客户机请求邮件服务器提交所收到邮件的方式,请求邮件服务器只下载所选中的邮件而不是全部邮件。客户机可先阅读邮件信息的标题和发送者的名字再决定是否下载这个邮件。通过用户的客户机电子邮件程序,IMAP可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。
支持种IMAP的常用邮件客户端有:ThunderMail,Foxmail,Microsoft Outlook等。

二.POP协议详解

邮件收发的流程原理,可以参考邮件发送和接收原理,可以帮助你迅速理解,建议跟着做一遍,
然后对于邮件内容的解析可以参考邮件格式分析,帮助你分析邮件数据.
POP3指令

命令参数使用在何种状态中描述
USERUsername认证此命令与下面的pass命令若成功,将导致状态转换
PASSPassword认证此命令若成功,状态转化为处理
APOPName,Digest认证Digest是MD5消息摘要
STATNone处理请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL[Msg#](邮件号,下同)处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST[Msg#]处理返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
RETR[Msg#]处理返回由参数标识的邮件的全部文本
DELE[Msg#]处理服务器将由参数标识的邮件标记为删除,由QUIT命令执行
TOP[Msg#]处理服务器将返回由参数标识的邮件的邮件头+前n行内容,n必须是正整数
NOOPNone处理服务器返回一个肯定的响应,用于测试连接是否成功
QUITNone处理/认证1) 如果服务器处于“处理”状态,么将进入“更新”状态以删除任何标记为删除的邮件,并重返“认证”状态。2) 如果服务器处于“认证”状态,则结束会话,退出连接

补充

  • windows下使用telnet向邮件服务器发送数据是以单字节发送.
  • 在代码中向邮件服务器发送命令时,需要在命令后加上"\r\n".
  • 各种协议大同小异,根据不同的指令获取自己想要的数据,接着就是解析数据里的内容.
  • 原始的邮件数据可以在foxmail的“更多操作”->"查看邮件源码"中看到
三.实例

根据第二步可以轻松构建获取邮件的原始数据,接下来就是解析邮件内容,需要注意邮件的编码方式.
略。哈哈哈。稍微分析一下接收到的邮件信息格式进行拆分获取就可以了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
POP3(Post Office Protocol version 3)是一种用于接收电子邮件协议。以下是 POP3 接收邮件的基本流程: 1. 建立连接:使用 TCP/IP 协议建立与邮件服务器的连接。 2. 发送身份验证:发送用户名和密码以进行身份验证。 3. 发送命令:发送命令以执行邮件接收操作。常用的命令包括: * USER:指定用户名。 * PASS:指定密码。 * STAT:获取邮箱中的邮件总数和总大小。 * LIST:获取邮件的编号和大小。 * RETR:获取指定邮件的详细内容。 * DELE:标记指定邮件为删除状态。 * QUIT:关闭与服务器的连接。 4. 获取邮件使用 RETR 命令获取指定邮件的详细内容,然后将其保存到本地计算机上。 5. 删除邮件使用 DELE 命令将邮件标记为删除状态。 6. 关闭连接:使用 QUIT 命令关闭与服务器的连接。 以下是使用 C++ 实现 POP3 接收邮件的基本代码框架: ```c++ #include <iostream> #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { // 初始化 Winsock 库 WSADATA wsaData; int err = WSAStartup(MAKEWORD(2, 2), &wsaData); if (err != 0) { cout << "WSAStartup failed: " << err << endl; return -1; } // 创建套接字 SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { cout << "socket failed: " << WSAGetLastError() << endl; WSACleanup(); return -1; } // 设置服务器地址和端口号 sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("邮件服务器地址"); serverAddr.sin_port = htons(110); // 连接服务器 err = connect(sock, (sockaddr*)&serverAddr, sizeof(serverAddr)); if (err == SOCKET_ERROR) { cout << "connect failed: " << WSAGetLastError() << endl; closesocket(sock); WSACleanup(); return -1; } // 发送身份验证信息和命令,接收服务器响应 // ... // 关闭连接 closesocket(sock); WSACleanup(); return 0; } ``` 注意:上述代码仅为参考,具体实现过程需要根据 POP3 协议规范进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值