计算机网络课程设计之电子邮件客户端程序设计与实现
前言
本實驗主要是用smtp協議發郵件,收郵件要用到POP3,時間有限,只實現了發郵件,實現過程放在總體設計中
白嫖容易,創作不易,本文原創,轉載請注明!!!
源碼和可運行程序:
鏈接:https://pan.baidu.com/s/1A9KctmpP2JJgyW2wLrehIg
提取碼:Lin2
計算機網絡課程設計:
計算機網絡課程設計之網絡聊天程序的設計與實現
計算機網絡課程設計之Tracert與Ping程序設計與實現
計算機網絡課程設計之基于 IP 多播的網絡會議程序
計算機網絡課程設計之網絡嗅探器的設計與實現
計算機網絡課程設計之電子郵件客戶端程序設計與實現
計算機網絡課程設計之TELNET 終端設計與實現
計算機網絡課程設計之網絡代理服務器的設計與實現
計算機網絡課程設計之簡單 Web Server 程序的設計與實現
Qt入門系列:
Qt學習之C++基礎
Qt學習之Qt安裝
Qt學習之Qt基礎入門(上)
Qt學習之Qt基礎入門(中)
Qt學習之Qt基礎入門(下)
創作不易,整個課程設計程序3000多行代碼,所有實驗都寫在了一個程序中,時間有限,能力不足,轉載望注明!!!
本文鏈接
個人博客:https://ronglin.fun/archives/272
PDF鏈接:https://pan.baidu.com/s/1lk91DrJrAQfB3CzTyWYSqQ 提取碼:Lin2
CSDN: https://blog.csdn.net/RongLin02/article/details/122510502
實驗題目
電子郵件客戶端程序設計與實現
實驗目的
參照教材 6.5 節原理,設計一個電子郵件客戶端程序。
總體設計
(含背景知識或基本原理與算法、或模塊介紹、設計步驟等)
首先模擬一下smtp是如何發郵件的
參考博客:
https://www.cnblogs.com/feigen/p/11150757.html
https://blog.csdn.net/qq_35644234/article/details/68961603
本文以163郵箱為例,但是QQ郵箱同理,只需要把地址由smtp.163.com換為smtp.qq.com
文本格式放在附錄
授權碼
授權碼的獲取,登錄163郵箱 點擊設置 -> POP3/SMTP/IMAP然后點擊下邊的新增授權碼,然后將授權碼保存下來
SMTP登錄
打開cmd輸入telnet smtp.163.com 25回車
220 163.com Anti-spam GT for Coremail System (163com[20141201])這句話的意思是連接163郵箱的smtp服務,連接IP為smtp.163.com端口為25,返回220說明服務就緒
然后輸入HELO smtp.163.com回車
這句話的意思是請求命令完成
然后輸入AUTH LOGIN回車
這句話的意思是要登錄163郵箱,334表示等待用戶輸入
然后要把自己的郵箱賬號轉化為Base64編碼格式,搜索引擎搜索Base64編碼工具即可,如下
然后在命令行輸入編碼之后的郵箱賬號,我這里輸入MTU2eHh4eHh4eHhAMTYzLmNvbQ==回車
334 UGFzc3dvcmQ6然后334,表示繼續等待用戶輸入
同理,我們要用之前獲得的授權碼,將授權碼也轉為Base64格式,如下:
然后輸入編碼之后的授權碼,我這里輸入U1hYWFhYWFhYWFhYWFhYWA==回車
235 Authentication successful返回235,并且登錄成功,然后就可以發送郵件了
SMTP發送
發送郵件過程如下,登錄成功之后
輸入mail from:<156xxxxxxxx@163.com>回車,這里是設置發件人的信息,也就是我們自己的郵箱賬號,返回ok
輸入rcpt to:<277xxxxxxx@qq.com>回車,這里是設置收件人的信息,是收件人的郵箱賬號,然后返回ok
250 Mail OK輸入data回車,表示開始傳送數據(發送郵件)
354 End data with <CR><LF>.<CR><LF>然后簡要說明一下郵件的格式
from:156xxxxxxxx@163.com to:277xxxxxxx@qq.com subject:testthis is content格式如上,from是發件人,可不設置,to是收件人可不設置,subject是郵件的主題,然后就是正文部分,注意正文部分和subject中間有一個回車
我們依次輸入上述內容,輸入完成后,正文結束輸入一個.回車
然后輸入quit回車
221 Bye表示退出成功
過程如下 文本格式放在附錄
詳細設計
(含主要的數據結構、程序流程圖、關鍵代碼等)
過程已經明白,然后就是將其集成到Qt中,界面如下
將用戶輸入郵箱賬號和授權碼然后點擊登錄,
在代碼中負責用TCP連接SMTP 25端口,然后根據上述流程登錄成功,注意要轉為Base64碼
部分代碼如下
同時要根據服務器返回的狀態碼,判斷每一步的命令是否成功,例如,判斷登錄
this->clientsocket->write("AUTH LOGIN\r\n"); //傳輸登錄命令this->clientsocket->waitForReadyRead(waitTimeMs); //等待傳輸完畢QString recvdata = clientsocket->readAll(); //獲得返回數據successFlag = recvdata.contains("334"); //是否返回了334代碼if(!successFlag){emit this->sendError("登陸命令失敗");this->clientsocket->abort();return false;}然后需要注意在每個指令上用到回車的地方都要加上\r\n
實驗結果與分析
首先登錄
登錄成功,然后輸入內容,發送郵件
登錄qq郵箱看結果
看到郵件已經成功發送
小結與心得體會
對發送郵件有了更好的理解,尤其是書上的SMTP協議的格式,同時也有了一定的能力用代碼發送郵件,對于郵箱這種常用的工具,對它的實現原理有了更好的理解,獲益匪淺
=w=
附
cmd 登錄SMTP過程文本格式
telnet smtp.163.com 25 220 163.com Anti-spam GT for Coremail System (163com[20141201]) HELO smtp.163.com 250 OK AUTH LOGIN 334 dXNlcm5hbWU6 MTU2eHh4eHh4eHhAMTYzLmNvbQ== 334 UGFzc3dvcmQ6 U1hYWFhYWFhYWFhYWFhYWA== 235 Authentication successful mail from:<156xxxxxxxx@163.com> 250 Mail OK rcpt to:<277xxxxxxx@qq.com> 250 Mail OK data 354 End data with <CR><LF>.<CR><LF> from:156xxxxxxxx@163.com to:277xxxxxxx@qq.com subject:testthis is content . 250 Mail OK queued as smtp4,HNxpCgDn3JG5T9Zh70g4EQ--.17592S2 1641435114 quit 221 Bye總結
以上是生活随笔為你收集整理的计算机网络课程设计之电子邮件客户端程序设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何连动作导入3dmax_教你如何将犀牛
- 下一篇: 程序员之常用软件安装过程记录