使用QTcpSocket实现从POP3服务器查询和收取邮件。
一是服务器地址:一般是POP3.域名.com,端口一般是110
要从POP3读取内容,就必须了解它的协议:
主要命令有
AUTH 认证请求
返回
+OK
NTLM
下在再通过返回的类型认证
AUTH NTLM
用户名验证码
密码验证码
返回+OK User successfally logged on 的信息
其他指令如下。
USER 用户名
PASS 密码
APOP 指定邮箱地址字串和MD5
STAT从服务器返回邮件数量和总字节数。
UIDL 返回邮件标识符。一邮件一号。是唯一的。
LIST返回邮件数量和每个邮件的大小
RETR n 返回指定邮件的全部文件内容
DELE将服务器邮件标志为删除。
RSET用于取消DELE的命令,取消邮件删除
TOP返回邮件前n行内容。
NOOP返回一个肯定的响应
QUIT结束会话
返回值开头包括一般两种
正响应,操作成功的响应
+OK
负响应,操作失败的响应
-ERR
操作完成以后,请用退出指令完成邮箱会话过程
QUIT
服务器返回
+OK 加多少字节的内容。
下面示例一下代码:
在pro里加
QT +=...... network
引用
#include<QTcpSocket>
先定义一个实例
QTcpSocket *pop3 = new QTcpSocket;
connect(pop3,&QTcpSocket::connected,this,[-](){
//连接成功了
});
connect(pop3,&QTcpSocket::disconnected,this,[-](){
//断开了
});
connect(pop3,&QTcpSocket::readyRead,this,[-](){
收到了服务器信息
QByteArray backdata = pop3->readAll();
QString strdata = QString::fromLcal8Bit(backdata);
从而得到了服务器返回内容。
});
这时可以连接服务器了
pop3->abort();
pop3->connectToHost("POP3地址",端口号);
要发送的内容是这样的:
QString txt="要发的内容,包括结构化了的内容";
txt.replace("\n","\r\n").append("\r\n");确保要发的内容包括回车换行
QByteArray mess = QByteArray().append(txt);
最后
pop3->write(mess);
完成内容发送。
这是基本的收发pop3服务器内容的方法。对于整个邮件接收过程。需要按顺利的向服务器连接认证,登录 ,用户名,密码,请求邮清单,循环按序号1..n收件,处理邮件DATA标准内容。最后用QUIT结束。最后用
pop3->disconnectFromHost();来断开连接。整个流程就此结束。