要做一个监测软件,出问题时需要发送一封邮件,所以最近就在网上找了下qt5怎么发邮件,下面贴出方法(代码部分是网上找的一个,自己测试可以使用,直接拷过去就可以了)。
基本原理就是使用telnet通过smtp协议来发送邮件。先简单说下telnet和smtp。
Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。smtp(simple mail transfer protocol)则是简单的邮件传输协议。(具体还是自己去找下度娘吧)
然后就是先熟悉一下telnet怎么发送邮件了首先需要打开电脑的telnet功能,先进入到控制面板界面,点击下图(左)中红框部分,然后在下右图中勾选telnet客户端,点击确定,稍等一下就可以了。
接下来是尝试在telnet中发送邮件:
1.使用telnet连接邮箱服务器,名称的格式基本都是smtp.xxx.com,例如:qq邮箱为smtp.qq.com,163邮箱为smtp.163.com,然后端口为25,如下左图
2.连接上之后会打印上右图第一行,然后输入helo sis,这句只是打招呼,收到250回复之后再输入auth login,收到334回复即可输入用户名,这里需要输入base64格式数据,即需要把你的邮箱先base64编码再输入进来,密码也是一样。(如果是qq邮箱需要先到邮箱-->设置里面打开smtp功能并使用授权码当做密码登陆)
3.登陆完成之后即可开始发送邮件了,如下图mail from会显示在收件人的邮件里面,rcpt to为收件人的邮箱地址,如果要向多个人同时发邮件可使用rcpt to多个邮箱(看到网上这么写的,我并没有试过同时向多个人发邮件)写完数据之后以“回车 . 回车”结束,最后回复250 ok即发送成功(下图中有3此报错,其实我连同下面第4次输入的都是同一个邮箱,这里不太明白为什么会报错)
qt中的实现思路也是如此,下面贴上代码:
先是smtp.c文件:
#include "smtp.h"
Smtp::Smtp(QString smtphost, QString smtpusername, QString smtppass)
{
this->smtphost = smtphost;
this->smtpusername = smtpusername;
this->smtppass = smtppass;
}
bool Smtp::Send( const QString &to, const QString &subject, const QString &body )
{
qDebug()<<"####"<<Q_FUNC_INFO;
bool res = false;
int waittime = 5 * 1000;
this->from = smtpusername;
rcpt = to;
ErrorMSG.clear();
Timeout = waittime;
linesend = 0;
isconnect = false;
QString tmp = "=?utf-8?B?"