神秘博客

QT SMTP采用QQ邮箱发送邮件25 587端口

使用QTcpSocket类就可以了,可以先 Telnet 测试下连接过程

//发送邮件
QString TcpLoginThread::sendMail(const QString & m, const QString & str)
{
	QString all;
	tcpSocketSmtp->connectToHost("smtp.qq.com", 25, QTcpSocket::ReadWrite);
	tcpSocketSmtp->waitForConnected(1000);  //连接等待1000ms超时
	tcpSocketSmtp->waitForReadyRead(1000);  //读取等待1000ms超时
	all = tcpSocketSmtp->readAll();
	qDebug() << all;
        
        /* 如果是587端口需要加上这个25端口不用
        tcpSocketSmtp->write("STARTTLS a\r\n");  //请求开始  //587端口巨坑这个后边必须加个空格随便字符 要是直接STARTTLS后边执行AUTH LOGIN后就挂逼了
	tcpSocketSmtp->waitForReadyRead(1000);
	all = tcpSocketSmtp->readAll();
	qDebug() << all;
        */

	tcpSocketSmtp->write("HELO smtp.qq.com\r\n");  
	tcpSocketSmtp->waitForReadyRead(1000);
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("AUTH LOGIN\r\n");  //请求登陆
	tcpSocketSmtp->waitForReadyRead(1000); 
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("admin\r\n"); //你的用户名可以直接用QT类转成Base64加密或者直接写转好的
	tcpSocketSmtp->waitForReadyRead(1000);  
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("admin\r\n");   //你的密码可以直接用QT类转成Base64加密或者直接写转好的
	tcpSocketSmtp->waitForReadyRead(1000);  
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("mail from:735609378@qq.com\r\n");  //自己的邮箱
	tcpSocketSmtp->waitForReadyRead(1000);
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write(QString("rcpt to:%1\r\n").arg(m).toUtf8());  //收件邮箱
	tcpSocketSmtp->waitForReadyRead(1000);
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("data\r\n");  //准备邮件发送
	tcpSocketSmtp->waitForReadyRead(1000);
	all = tcpSocketSmtp->readAll();
	qDebug() << all;

	tcpSocketSmtp->write("from:A@qq.com\r\n");  //自己的邮箱
	tcpSocketSmtp->waitForReadyRead(1000);

	tcpSocketSmtp->write(QString("to:%1\r\n").arg(m).toUtf8()); //收件邮箱
	tcpSocketSmtp->waitForReadyRead(1000);

	tcpSocketSmtp->write(QStringLiteral("Subject:密友注册验证码\r\n").toUtf8());  //邮件主题
	tcpSocketSmtp->waitForReadyRead(1000);

	tcpSocketSmtp->write("\r\n");
	tcpSocketSmtp->waitForReadyRead(1000);

	tcpSocketSmtp->write(QStringLiteral("您的注册验证码为: %1\r\n").arg(str).toUtf8()); //正文验证码
	tcpSocketSmtp->waitForReadyRead(1000);

	tcpSocketSmtp->write(".\r\n");   //开始发送
	tcpSocketSmtp->waitForReadyRead(10000);
	all = tcpSocketSmtp->readAll();
	if (all.indexOf("250 Ok: queued as") == -1) {
		qDebug() << all;
		tcpSocketSmtp->close();
		return all;
	}
	tcpSocketSmtp->close();
	return QStringLiteral("OK");
}

版权说明:
点赞

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

觉得文章有用就请我吃包辣条吧

微信扫一扫打赏