| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 计网大作业--SMTP邮件代理服务器 -> 正文阅读 |
|
[系统运维]计网大作业--SMTP邮件代理服务器 |
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 ready\r\n') 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?= "\r\n"?+ str(content) print("msg== ", msg) password:密码 password?= input("请输入邮箱密码: ") log_text:存储发送日志内容 log_text?= time.asctime(time.localtime(time.time())) + "\n\n这是一个邮件发送记录日志\n\n" 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”等)转发给邮件发送者
?命令过于简单,没提供认证等功能。 ?? 只传送7位的ASCII码,不能传送二进制文件。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 6:29:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |