赞
踩
运用各种编程语言实现基于 smtp 协议的 Email 客户端软件。通过本实验,使学生能够对网络编程有进一步的理解和掌握,并能够理解 smtp 协议的细节。
一、选择合适的编程语言编程实现基于 smtp 协议的 Email 客户端软件。
二、安装 Email 服务器或选择已有的 Email 服务器,验证自己的 Email 客户端软件是否能进行正常的 Email 收发功能。
设置qq邮箱,开启POP3/SMTP服务,获得授权码
1、利用socket库和对应的smtp服务器产生TCP连接,接收到来自smtp服务器响应的220消息。
2、借助socket依次发送HELO(身份确认)、AUTH LOGIN(授权登录)、MAIL FROM:<fromaddress>、RCPT TO:<toaddress>(邮件地址填写)。
3、按照格式填写DATA内容,指定content-type以及其他header,通过socket发送给smtp服务器,smtp服务器再转接给目标地址的服务器。发送邮件完毕。
在利用socket进行请求和响应的时候,对于不同的命令smtp服务器会响应不同的状态码:
建立TCP连接成功:220
HELO:250
AUTH LOGIN: 334
输入用户名:334
输入密码:235
MAIL FROM<fromaddress>: 250
RCTP TO<toaddress>: 250
DATA: 354
发送DATA: 250
可以通过检查步骤的状态码是否成功匹配,来判断本步骤是否成功进行。
③编写基于pop3的邮件接收客户端(在查询相关资料后,pop3相较于smtp更常用于邮件接收,此处选择pop3来实现更贴近实际情况)
利用python中poplib以及email库中的parser解码器来完成邮件的接收:
1、利用poplib.POP3(ADDR,PORT)和目标pop服务器建立连接,并利用user和pass_方法来完成身份认证。
2、利用retr方法获取对应index的邮件信息,并利用Parser().parserstr(),将获取的字符流message转换划分成dictionary对象。
3、解码dictionary对象,对于from、to的内容,利用parseraddr进行解析地址,划分得到header和address,对于header,再利用decode_str()进行解码,而对于subject,则直接使用decode_str()进行解码,decode_str()需要依赖于decode_header。
4、解码邮件的body部分,首先进行multipart的判断,如果是,则进行递归调用,进入到body的子部分进行解码分析,如果不是,则获取邮件的content-type,并根据其对应结果进行text和attachment的划分,将其结果打印输出。
5、用户表示查询完毕,服务器连接中断。
见附件smtp/ smtp_server.py
见附件 smtp/ pop3_server.py
3、实验运行结果
(1)发送邮件
①用户输入信息:发送方邮箱地址/发送方邮箱授权码/接收方邮箱地址/邮件主题/邮件内容/是否添加附件
①用户输入信息登录,可选项(是否显示邮箱状态信息【邮件数量/文件大小】,是否显示邮件列表)
②询问用户对邮件进行操作(若进行操作则打印邮件列表)还是退出程序
③询问用户浏览还是删除邮件:
当选择浏览时:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。