日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机网络课程设计之电子邮件客户端程序设计与实现

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机网络课程设计之电子邮件客户端程序设计与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本實驗主要是用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回車

250 OK

這句話的意思是請求命令完成
然后輸入AUTH LOGIN回車

334 dXNlcm5hbWU6

這句話的意思是要登錄163郵箱,334表示等待用戶輸入
然后要把自己的郵箱賬號轉化為Base64編碼格式,搜索引擎搜索Base64編碼工具即可,如下

156xxxxxxxx@163.com MTU2eHh4eHh4eHhAMTYzLmNvbQ==

然后在命令行輸入編碼之后的郵箱賬號,我這里輸入MTU2eHh4eHh4eHhAMTYzLmNvbQ==回車

334 UGFzc3dvcmQ6

然后334,表示繼續等待用戶輸入
同理,我們要用之前獲得的授權碼,將授權碼也轉為Base64格式,如下:

SXXXXXXXXXXXXXXX U1hYWFhYWFhYWFhYWFhYWA==

然后輸入編碼之后的授權碼,我這里輸入U1hYWFhYWFhYWFhYWFhYWA==回車

235 Authentication successful

返回235,并且登錄成功,然后就可以發送郵件了

SMTP發送

發送郵件過程如下,登錄成功之后
輸入mail from:<156xxxxxxxx@163.com>回車,這里是設置發件人的信息,也就是我們自己的郵箱賬號,返回ok

250 Mail 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中間有一個回車
我們依次輸入上述內容,輸入完成后,正文結束輸入一個.回車

250 Mail OK queued as smtp4,HNxpCgDn3JG5T9Zh70g4EQ--.17592S2 1641435114

然后輸入quit回車

221 Bye

表示退出成功
過程如下 文本格式放在附錄

詳細設計

(含主要的數據結構、程序流程圖、關鍵代碼等)
過程已經明白,然后就是將其集成到Qt中,界面如下

將用戶輸入郵箱賬號和授權碼然后點擊登錄,
在代碼中負責用TCP連接SMTP 25端口,然后根據上述流程登錄成功,注意要轉為Base64碼
部分代碼如下

//TCP客戶端連接"smtp.163.com" 25端口 this->clientsocket->connectToHost("smtp.163.com",25,QTcpSocket::ReadWrite);

同時要根據服務器返回的狀態碼,判斷每一步的命令是否成功,例如,判斷登錄

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

總結

以上是生活随笔為你收集整理的计算机网络课程设计之电子邮件客户端程序设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。