- 软件设计
2.1 数据结构
变量名:
S:本机上的socket链接数据结构
s = socket()
host、port :本机IP地址和163邮箱端口号
host = "127.0.0.1"
port = 25
new_socket :server端接受信息的socket链接数据结构
new_socket, address = s.accept()
post_msg :用来记录和打印传输时双方发送的字符串
post_msg = ('220 beta.gov Simple Mail Transfer Service readyrn')
mailfrom :接受到的具体信息
mailfrom = new_socket.recv(1024)
mailfrom = str(mailfrom)
name_mailfrom 、username:邮箱源地址(后续用于用户名打印)
name_mailfrom = mailfrom.replace("b'MAIL FROM: <", "")
name_mailfrom = name_mailfrom.replace('>\r\n'', '')
rcpt_to :用于存放邮箱地址的字符串数组
rcpt_to = []
count :用于记录包的数量(也表示第几个)的记数变量
count = 0
savetext.append(str(data))
count += 1
Subject :邮件主题记录字符串
Subject = ''.join(list_subject)
content:base64下邮件信息
content = ''.join(list_content)
msg:发送的邮件信息
msg = "rn" + str(content)
print("msg== ", msg)
password:密码
password = input("请输入邮箱密码: ")
log_text:存储发送日志内容
log_text = time.asctime(time.localtime(time.time())) + "nn这是一个邮件发送记录日志nn"
now_time:用来存储当前时间
now_time = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
filename:日志文件名
filename = filename = "Log_Down_" + now_time
2.2 socket编程内部函数解释
TCP/UDP Socket是一种基于Client-Server的编程模型,服务端监听客户端的连接请求,一旦建立连接即可以进行数据传输。那么对TCP/UDP Socket编程的介绍也分为客户端和服务端:
以下通过查阅资料对于python内部的socket函数进行分析:
1 Socket函数:创建套接字 如下:
s = socket()
2 Bind函数:将套接字表示为地址 如下:
host = "127.0.0.1"
# port = 465
port = 25
s.bind((host, port))
以上语句将端口、地址与套接字绑定
3 Listen函数:进行监听 如下:
s.listen(5)
4 Accpet函数:进行与客户机的连接 如下:
new_socket, address = s.accept()
此处s.accept返回的是接受的客户机的地址,故address=返回值
5 Connect函数:连接远处服务器请求 如下:
client_socket.connect((mail_server, port)) # 连接服务器
指定了远方客户机
个人理解:区别accpet和connect→accept指与发件邮箱连接,connect指与收件邮箱连接。
Recv函数:接受远端的数据 如下:接收了client的大小为1024的数据。
recv1 = client_socket.recv(1024) # 接受邮件服务器的回复
Send函数:发送给远方主机 如下:
new_socket.send(post_msg.encode('utf-8'))
即将调用内容发送给new_socket
Close函数:关闭套接字
2.3 模块结构
为方便阅读,以下代码以截图显示。
- 程序启动阶段:
此处代码用于建立server的socket,也就是程序的建立。
- 与发送端建立连接:
- 检查发送端邮箱
- 若有多个收件邮箱时,分别检查格式并利用布尔变量进行顺序查询
2.打印发送信息,此处利用count进行计数第几个字符。初始flag为1,若信息小于1024时则判定结束,flag改为0,否则count++,flag为1,即对下一个字符进行判定。
到此为止发送阶段结束。
- 对发送内容进行解码,以得到完整的发送信息
- 打印信息
- 身份确认,密码检验
- 建立过程,与上段代码类似,不再赘述
- 密码检测系统
- 邮件接收端和服务响应
- 转换发送内容
- 发送信息并结束进程
2.4流程图
- 实验结果演示
3.1输出检测
3.2 差错处理
提供差错报告:将实际邮件服务器的差错报告状态码及短语解 释(如“550 Invalid recipient”等)转发给邮件发送者
- 实验总结与心得体会
- 本次实验独立完成,实际上机调试时间大概在十个小时左右。
- 编程环境问题:在配置环境之后pycharm仍旧无法运行程序,最后选择vscode完成实验
- 编程语言python并未经历过系统学习,在研究时需要查阅资料。
- SMTP缺点:
命令过于简单,没提供认证等功能。
只传送7位的ASCII码,不能传送二进制文件。
参考网站:python网络编程——socket基础篇 - 人生苦短,python当歌 - 博客园
GitHub - zhangchi991022/smtp-socket: SMTP代理服务器
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)