本篇文章为大家展示了Python使用poplib模块实现收取邮件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
使用poplib模块收取邮件也很简单,该模块提供了poplib。POP3和poplib。POP3_SSL两个类,分别用于连接普通的流行服务器和基于SSL的流行服务器。
一旦使用poplib。POP3或poplib。POP3_SSL连接到服务器之后,接下来基本就按照POP3协议与服务器进行交互。为了更好地理解poplib模块的运行机制,下面先简单介绍POP3协议内容。
POP3协议也属于请求,响应式交互协议,当客户端连接到服务器之后,客户端向流行服务器发送请求,而流行服务器则对客户端生成响应数据,客户端可通过响应数据下载得到邮件内容。当下载完成后,邮件客户端可以删除或修改任意邮件,而无须与电子邮件服务器进行进一步交互。
POP3的命令和响应数据都是基于ASCII文本的,并以CR和低频(/r/n)作为行结束符,响应数据包括一个表示返回状态的符号(+/)和描述信息。
请求和响应的标准格式如下:
请求标准格式:命令,[参数),CRLF 响应标准格式:+ OK /(错),description CRLF
POP3协议客户端的命令和服务器端对应的响应数据如下:
用户名:向流行服务器发送登录的用户名。
通过字符串:向流行服务器发送登录的密码。
退出:退出流行服务器。
统计:统计邮件服务器状态,包括邮件数和总大小。
[msg_no]:列表列出全部邮件或指定邮件。返回邮件编号和对应大小。
retr msg_no:获取指定邮件的内容(根据邮件编号来获取,编号从1开始)。
删除msg_no:删除指定邮件(根据邮件编号来删除,编号从1开始)。
等待:空操作。仅用于与服务器保持连接。
资源集:用于撤销削除命令。
poplib模块完全模拟了上面命令,poplib。POP3或poplib。POP3_SSL为上面命令提供了相应的方法,开发者只要依次使用上面命令即可从服务器端下载对应的邮件。
使用poplib收取邮件可分为两步:
使用poplib。POP3或poplib。POP3_SSL按POP3协议从服务器端下载邮件。
使用email.parser。解析器或email.parser。BytesParser解析邮件内容,得到EmailMessage对象,从EmailMessage对象中读取邮件内容。
下面程序示范了如何使用poplib模块来收取邮件:
import poplib,, os.path, mimetype 得到email.parser import  BytesParser,解析器 得到email.policy import 违约 #,输入邮件地址,,口令和POP3服务器地址: 时间=email & # 39; kongyeeku@qq.com& # 39; 时间=password & # 39; 123456 & # 39; 时间=pop3_server & # 39; pop.qq.com& # 39; #,连接到POP 3服务器: # conn =, poplib.POP3 (pop3_server, 110) 时间=conn poplib.POP3_SSL (pop3_server, 995) #,可以打开或关闭调试信息: conn.set_debuglevel (1) #,可选:打印POP 3服务器的欢迎文字: 打印(conn.getwelcome () .decode (& # 39; utf - 8 # 39;)) #,输入用户名:密码信息 #,相当于发送POP 3的用户命令 conn.user(电子邮件) #,相当于发送POP 3的通过命令 conn.pass_(密码) #,获取邮件统计信息,相当于发送POP 3的stat命令 message_num, total_size =, conn.stat () 打印(& # 39;邮件数:,% s只总大小:,% & # 39;,%,(message_num, total_size)) #,获取服务器上的邮件列表,相当于发送POP 3的列表命令 #,resp保存服务器的响应码 #,邮件列表保存每封邮件的编号,大小 分别地,,邮件,,octets =, conn.list () 打印(职责,邮件) #,获取指定邮件的内容(此处传入总长度,也就是获取最后一封邮件) #,相当于发送POP 3的retr命令 #,resp保存服务器的响应码 #,数据保存该邮件的内容 分别地,,数据,octets ,=, conn.retr (len(邮件) #,将数据的所有数据(原本是一个字节列表)拼接在一起 时间=msg_data b # 39; \ r \ n # 39; . join(数据) #,将字符串内容解析成邮件,此处一定要指定政策=违约 时间=msg BytesParser(政策=默认).parsebytes (msg_data),,,,,,, #① print(类型(msg)) 打印(& # 39;发件人:& # 39;,+,味精(& # 39;从# 39;]) 打印(& # 39;收件人:& # 39;,+,味精(& # 39;使# 39;)) 打印(& # 39;主题:& # 39;,+,味精(& # 39;主题# 39;]) 打印(& # 39;第一个收件人名字:& # 39;,+,味精(& # 39;伍仟# 39;].addresses [0] .username) 打印(& # 39;第一个发件人名字:& # 39;,+,味精(& # 39;从# 39;].addresses [0] .username) for part  msg.walk拷贝(): ,,,counter =1 ,,,#,如果maintype是扇形,说明是容器(用于包含正文,附件等) ,,,if part.get_content_maintype(),==, & # 39;多部分# 39;,: ,,,,,,,继续 ,,,#,如果maintype是扇形,说明是邮件正文部分 ,,,elif part.get_content_maintype(),==, & # 39;文本# 39;: ,,,,,,,印刷(part.get_content ()) ,,,#,处理附件 ,,,else : ,,,,,,,#,获取附件的文件名 ,,,,,,,filename =, part.get_filename () ,,,,,,,#,如果没有文件名,程序要负责为附件生成文件名 ,,,,,,,if not 文件名: ,,,,,,,,,,,#,根据附件的contnet_type来推测它的后缀名 ,,,,,,,,,,,ext =, mimetypes.guess_extension (part.get_content_type ()) ,,,,,,,,,,,#,如果推测不出后缀名 ,,,,,,,,,,,if not ext: ,,,,,,,,,,,,,,,#,使用。斌作为后缀名 ,,,,,,,,,,,,,,,ext =, & # 39;。斌# 39; ,,,,,,,,,,,#,程序为附件来生成文件名 ,,,,,,,,,,,filename =, & # 39;部分03 - % d % & # 39;, %,(计数器,ext) null null null null null nullPython使用poplib模块实现收取邮件