使用QTcpSocket实现向SMTP服务器发送简单邮件。
一是服务器地址:一般是smtp.域名.com,端口一般是25
要向SMTP发送内容,就必须了解它的协议:
主要有
问候:
EHLO 服务器地址
返回250 和一些内容
登录:
AUTH LOGIN
返回334 内容
输入用户名:
OTU用户名的base64码
返回334 内容
输入密码:
直接base64码
返回235 authentication successful登录成功信息
这时可以发送邮件发送者:
MAIL FROM:<邮箱地址>
返回250 OK
邮件接收都地址:
RCPT TO:<邮箱地址>
返回250 OK
这时可以发送邮件内容了
DATA
返回354 提示你结果内容用两个回车换行
其中内容包括
Subject:base64码
To:邮箱地址
From:用户名<邮箱地址>
Content-Type:text/plain;charset=UTF8;
Conent-Transfer-Encoding:7BIT
下面加上邮件内容
结束用两个回车换行结束
此时服务器返回
250 OK
发送完了以后,请用退出指令完成邮箱发送过程
QUIT
服务器返回
250 加多少字节的内容。
下面示例一下代码:
在pro里加
QT +=...... network
引用
#include<QTcpSocket>
先定义一个实例
QTcpSocket *smtp = new QTcpSocket;
connect(smtp,&QTcpSocket::connected,this,[-](){
//连接成功了
});
connect(smtp,&QTcpSocket::disconnected,this,[-](){
//断开了
});
connect(smtp,&QTcpSocket::readyRead,this,[-](){
收到了服务器信息
QByteArray backdata = smtp->readAll();
QString strdata = QString::fromLcal8Bit(backdata);
从而得到了服务器返回内容。
});
这时可以连接服务器了
smtp->abort();
smtp->connectToHost("SMTP地址",端口号);
要发送的内容是这样的:
QString txt="要发的内容,包括结构化了的内容";
txt.replace("\n","\r\n").append("\r\n");确保要发的内容包括回车换行
QByteArray mess = QByteArray().append(txt);
最后
smtp->write(mess);
完成内容发送。
这是基本的收发SMTP服务器内容的方法。对于整个邮件发送过程。需要按顺利的向服务器问候,登录 ,用户名,密码,发送邮件者,收件者,DATA,标准内容。最后两个回车换行结束 。最后用QUIT结束。最后用
stmp->disconnectFromHost();来断开连接。整个流程就此结束。