QT5.5 发送忘记密码邮件

[cpp]  view plain  copy
  1. <span style="font-size:18px;">//之前一直发送不成功,后来只好发送给自己,然后再转发才OK  
  2. void createRandPwd()  
  3. {  
  4.     QStringList m_slCodeRange;  
  5.     m_slCodeRange<<"0"<< "1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<  
  6.         "a"<<"b"<<"c"<<"d"<<"e"<<"f"<<"g"<<"h"<<"i"<<"j"<<"k"<<"l"<<"m"<<"n"  
  7.         "o"<<"p"<<"q"<<"r"<<"s"<<"t"<<"u"<<"v"<<"w"<<"x"<<"y"<<"z"<<  
  8.         "A"<<"B"<<"C"<<"D"<<"E"<<"F"<<"G"<<"H"<<"I"<<"J"<<"K"<<"L"<<"M"<<"N"<<  
  9.         "O"<<"P"<<"Q"<<"R"<<"S"<<"T"<<"U"<<"V"<<"W"<<"X"<<"Y"<<"Z"<<"Z";  
  10.     for (int i = 0; i < 6; i++)  
  11.         mailpwd += m_slCodeRange[qrand() % 62];   
  12. }  
  13.   
  14.  void communication(QTcpSocket & socket, const char *msg)  
  15. {  
  16.     char data[1024];  
  17.     int nread = 0;  
  18.     try  
  19.     {  
  20.         if (socket.write(msg, qstrlen(msg)) == -1)  
  21.             qDebug() << "@@@@@@@@@@@@@@ socket.write failed";  
  22.         socket.flush();  
  23.   
  24.         if (socket.waitForReadyRead(-1) == true)  
  25.         {  
  26.             memset(data, '\0'sizeof(data));  
  27.             socket.readLine(data, 1024);  
  28.             qDebug() << data;  
  29.         }  
  30.     }  
  31.     catch (...)  
  32.     {  
  33.         qDebug() << "Exception socket.write failed";  
  34.     }  
  35.       
  36. }  
  37.   
  38. void smtpCommunication(QTcpSocket & socket)  
  39. {  
  40.     communication(socket, "HELO smtp.163.com\r\n");  
  41.     communication(socket, "AUTH LOGIN\r\n");    
  42.     communication(socket, QByteArray("xxxx@163.com").toBase64()+"\r\n");     
  43.     communication(socket, QByteArray("XXXX").toBase64()+"\r\n");   
  44.     communication(socket, "MAIL FROM: <xxxxx@163.com>\r\n");  
  45.     communication(socket, "RCPT TO: <xxxx@163.com>\r\n");  
  46.     //communication(socket, "RCPT TO: <xxxxx@163.com>\r\n");  
  47.     communication(socket, "DATA\r\n");  
  48.     QString str = QStringLiteral("From: xxxxx@163.com\r\nTo: xxxxx@163.com\r\nSubject:密码重置\r\n\r\n尊敬的用户,你好\r\n\r\n    你的帐号和密码已经被重置为'admin'和'");  
  49.     str += mailpwd;  
  50.     str += QStringLiteral("',请劳记!\r\n\r\n\r\n.\r\n");  
  51.     QByteArray ba = str.toUtf8();   
  52.     char *mailmessage = ba.data();  
  53.     communication(socket,mailmessage);  
  54.     communication(socket, "quit\r\n");  
  55.   
  56.     qDebug() << "send email ok." << endl;  
  57. }  
  58.   
  59. void readWelcome(QTcpSocket & socket)  
  60. {  
  61.     char data[1024];  
  62.     int len;  
  63.     try  
  64.     {  
  65.         if (socket.waitForReadyRead(-1) == true)  
  66.         {  
  67.             memset(data, '\0'sizeof(data));  
  68.             len = socket.readLine(data, 1024);  
  69.             qDebug() <<"Exception readWelcome "<<data << endl;  
  70.         }  
  71.     }  
  72.     catch(...)  
  73.     {  
  74.         qDebug() <<"readWelcome "<< endl;  
  75.     }  
  76.       
  77. }  
  78.   
  79. void ForgetPwd::btn_ok()  
  80. {  
  81.     QTcpSocket socket;  
  82.     socket.connectToHost("smtp.163.com", 25);  
  83.   
  84.     if (socket.waitForConnected(2000))    
  85.     {    
  86.         qDebug() << "smtp server connected success.";    
  87.         readWelcome(socket);    
  88.         smtpCommunication(socket);    
  89.         socket.close();  
  90.     }    
  91.     else    
  92.         qDebug() << "connection failed.";   
  93.   
  94.       
  95. }  
  96. </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,就安了,完成了,看看邮件收到了没

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值