使用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"); }