- <span style="font-size:18px;">
- void createRandPwd()
- {
- QStringList m_slCodeRange;
- m_slCodeRange<<"0"<< "1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<
- "a"<<"b"<<"c"<<"d"<<"e"<<"f"<<"g"<<"h"<<"i"<<"j"<<"k"<<"l"<<"m"<<"n"
- "o"<<"p"<<"q"<<"r"<<"s"<<"t"<<"u"<<"v"<<"w"<<"x"<<"y"<<"z"<<
- "A"<<"B"<<"C"<<"D"<<"E"<<"F"<<"G"<<"H"<<"I"<<"J"<<"K"<<"L"<<"M"<<"N"<<
- "O"<<"P"<<"Q"<<"R"<<"S"<<"T"<<"U"<<"V"<<"W"<<"X"<<"Y"<<"Z"<<"Z";
- for (int i = 0; i < 6; i++)
- mailpwd += m_slCodeRange[qrand() % 62];
- }
-
- void communication(QTcpSocket & socket, const char *msg)
- {
- char data[1024];
- int nread = 0;
- try
- {
- if (socket.write(msg, qstrlen(msg)) == -1)
- qDebug() << "@@@@@@@@@@@@@@ socket.write failed";
- socket.flush();
-
- if (socket.waitForReadyRead(-1) == true)
- {
- memset(data, '\0', sizeof(data));
- socket.readLine(data, 1024);
- qDebug() << data;
- }
- }
- catch (...)
- {
- qDebug() << "Exception socket.write failed";
- }
-
- }
-
- void smtpCommunication(QTcpSocket & socket)
- {
- communication(socket, "HELO smtp.163.com\r\n");
- communication(socket, "AUTH LOGIN\r\n");
- communication(socket, QByteArray("xxxx@163.com").toBase64()+"\r\n");
- communication(socket, QByteArray("XXXX").toBase64()+"\r\n");
- communication(socket, "MAIL FROM: <xxxxx@163.com>\r\n");
- communication(socket, "RCPT TO: <xxxx@163.com>\r\n");
-
- communication(socket, "DATA\r\n");
- QString str = QStringLiteral("From: xxxxx@163.com\r\nTo: xxxxx@163.com\r\nSubject:密码重置\r\n\r\n尊敬的用户,你好\r\n\r\n 你的帐号和密码已经被重置为'admin'和'");
- str += mailpwd;
- str += QStringLiteral("',请劳记!\r\n\r\n\r\n.\r\n");
- QByteArray ba = str.toUtf8();
- char *mailmessage = ba.data();
- communication(socket,mailmessage);
- communication(socket, "quit\r\n");
-
- qDebug() << "send email ok." << endl;
- }
-
- void readWelcome(QTcpSocket & socket)
- {
- char data[1024];
- int len;
- try
- {
- if (socket.waitForReadyRead(-1) == true)
- {
- memset(data, '\0', sizeof(data));
- len = socket.readLine(data, 1024);
- qDebug() <<"Exception readWelcome "<<data << endl;
- }
- }
- catch(...)
- {
- qDebug() <<"readWelcome "<< endl;
- }
-
- }
-
- void ForgetPwd::btn_ok()
- {
- QTcpSocket socket;
- socket.connectToHost("smtp.163.com", 25);
-
- if (socket.waitForConnected(2000))
- {
- qDebug() << "smtp server connected success.";
- readWelcome(socket);
- smtpCommunication(socket);
- socket.close();
- }
- else
- qDebug() << "connection failed.";
-
-
- }
- </span>
telnet命令发送邮件
打开cmd.
1. 输入 telnet smtp.163.com 25 回车
我试验了好几个邮箱服务器,大都有严厉的反垃圾邮件系统,导致邮件发不出去,幸好163的邮箱竟然可以.TX威武呀.smtp的协议端口为25.
2. 输入 HELO smtp.163.com 回车
我搜集的一些资料中既有使用helo又有使用ehlo的,结果还使我纠结了好久,后来又google才知道,原来都可以.这句应该是与服务器打招呼.如果返回250表示服务器准备就绪,可以进行下一步了.
3. 输入 AUTH LOGIN 回车
这是指定登录的模式,这句应该是一般模式.返回334就可以进行下一步了.
4. 输入 经过base64加密的你的账户名,比如你的qq号是123456,就去百度下 base64加密,然后找个地方将你的q号加密,copy到命令行回车
返回334,下一步是输入经过base64加密过的你的密码
5. 输入 你的base64加密过的密码,方法同上
然后服务器返回235,表示验证通过,可以进行下一步了.
6. 输入 mail from:<****@qq.com> 这里写你的qq邮箱
服务器返回250.
7. 输入 rcpt to:<****@qq.com> 这里写你要发送给的qq邮箱,貌似其他邮箱不可以
服务器返回250,下一步
8. 输入 data
表示开始传送数据,服务器返回354
9. 输入 subject:你的主题
此处服务器无回显
10. 输入 此处什么也不用写,直接回车换行,作为主题与正文的分界
此处服务器无回显
11. 输入 在这里写你的正文就可以了
此处服务器也无回显
12. 输入 .
对,就是一个英文句号,表示数据传送完毕,服务器返回250
13. 输入 quit
服务器返回221,就安了,完成了,看看邮件收到了没