电子邮件客户端程序设计与实现

计算机网络课程设计

一、设计题目

电子邮件客户端程序设计与实现

二、实验内容

参照教材,设计一个电子邮件客户端程序

三、设计步骤

1.原理分析

一个电子邮件系统由三部分组成:用户代理、邮件服务器、以及邮件发送协议(如SMTP)和邮件接收协议(如POP3)。

2.环境准备

2.1 telnet功能启用

win10很多功能都默认关闭,要开启相关功能才能实现,这里把Telnet Client功能打上钩即可
telnet功能的开启

2.2 QQ邮箱的SMTP设置

因为代码实现是借助了QQ邮箱的服务器,所以首先要开启QQ邮箱的smtp服务,而默认是关闭的。
登录QQ邮箱,点“设置” - “帐户”。
设置
找到“POP3/SMTP服务”和“IMAP/SMTP服务”项,点“开启”。
开启服务
开启之后,点击“生成授权码”。这个授权码将作为邮箱的身份认证密码。
授权码生成

2.3 本地测试

在cmd窗口输入以下命令进入第三方登录界面
第三方登录
连接成功后
连接成功
用ehlo命令输入自己的QQ号进行登录
ehlo登录
选择auth login 方式登录
auth login
返回334,成功
然后输入自己base64加密的邮箱地址
输入邮箱地址
返回334,成功
再输入自己base64加密的授权码
输入授权码
返回235,成功登录。

四、程序流程图

程序流程图

五、关键代码

查看邮箱:

1
2
3
4
5
6
7
8
sockClient = socket(AF_INET, SOCK_STREAM, 0);
const char *host_id = "pop3.126.com";
pHostent = gethostbyname("pop.qq.com");
int port = 110;
addrServer.sin_addr.S_un.S_addr = *((DWORD *) pHostent->h_addr_list[0]);
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(port);
err = connect(sockClient, (SOCKADDR *) &addrServer, sizeof(SOCKADDR));

发送邮件:

1
2
3
4
5
6
7
8
sockClient = socket(AF_INET, SOCK_STREAM, 0); //建立socket对象
pHostent = gethostbyname("smtp.qq.com"); //得到有关于域名的信息,链接到qq邮箱服务器
SOCKADDR_IN addrServer; //服务端地址
addrServer.sin_addr.S_un.S_addr = *((DWORD *)pHostent->h_addr_list[0]); //得到smtp服务器的网络字节序的ip地址
addrServer.sin_family = AF_INET;
addrServer.sin_port = htons(25); //连接端口25
//int connect (SOCKET s , const struct sockaddr FAR *name , int namelen ); //函数原型
err = connect(sockClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); //向服务器发送请求

六、结果分析

1.邮箱查看

查看邮件,程序运行情况: 查看结果,已加密:
程序结果
程序结果
邮件代理上的结果一致
邮箱邮件

2.邮件发送

发送邮件,程序运行情况:
发送邮件
邮箱情况为:
邮件情况
注:实验过程中邮箱查看与发送为QQ邮箱,而接收邮件为网易邮箱,且都为本人账号,实际证明了代码在不同邮箱传递信息的可能性。如需完整代码请转至本人github主页i1548708011


电子邮件客户端程序设计与实现
http://zphxd.top/2022/12/19/电子邮件客户端程序设计与实现/
作者
i1548708011
发布于
2022年12月19日
许可协议