python3能够使用poplib.POP3进行邮件接收,具体以下:html
import poplib from email.parser import Parser def get_email(email,password,host="mail.163.com"): # connect to pop3 server server = poplib.POP3(host) # open debug server.set_debuglevel(1) # 身份验证 server.user(email) server.pass_(password) # 返回邮件总数目和占用服务器的空间大小(字节数), 经过stat()方法便可 # print("Mail counts: {0}, Storage Size: {0}".format(server.stat())) # 使用list()返回全部邮件的编号,默认为字节类型的串 resp, mails, octets = server.list() # print("响应信息: ", resp) # print("全部邮件简要信息: ", mails) # print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1: index = len(mails) if index < 1: return None resp, lines, octets = server.retr(index) # 能够得到整个邮件的原始文本: msg_content = b'\r\n'.join(lines).decode('utf-8') # 解析出邮件: msg = Parser().parsestr(msg_content) # print(msg) # print("解码后的邮件信息:\r\n"+str(msg)) #close server.close() return msg def delete_email(email,password,host="mail.163.com"): # connect to pop3 server server = poplib.POP3(host) # open debug # server.set_debuglevel(1) # 身份验证 server.user(email) server.pass_(password) # 使用list()返回全部邮件的编号,默认为字节类型的串 # list()返回tuple resp, mails, octets = server.list() # print("响应信息: ", resp) # print("全部邮件简要信息: ", mails) # print("list方法返回数据大小(字节): ", octets) # get the latest, index from 1: index = len(mails) # 删除全部邮件 while index > 0: server.dele(index) print(index) index = index -1 # commit command and close server.quit()
# 解析邮件正文 def get_mail_content(msg): if msg == None: return None for part in msg.walk(): if not part.is_multipart(): data = part.get_payload(decode=True) # print("emailcontent:\r\n"+data.decode()) return data.decode()
POP3.dele(which)python
标记消息号 which 以进行删除。在大多数服务器上,删除直到QUIT才被实际执行(主要例外是Eudora QPOP,它经过在任何断开链接上进行未决删除而故意违反RFC)。服务器
POP3.quit()函数
注销:提交更改,解锁邮箱,删除链接。ui
walk()编码
walk() 方法是一种通用的生成器,可用于以深度优先遍历顺序遍历消息对象树的全部部分和子部分。您一般会在 for 循环中使用 walk() 做为迭代器;每次迭代返回下一个子部分。debug
is_multipart()code
is_multipart()
若是消息的有效内容是一个子EmailMessage 对象的列表,则返回 True,不然返回 False。当 is_multipart() 返回 False 时,有效负载应为字符串对象(多是CTE编码的二进制有效负载)。注意,is_multipart() 返回 True 并不必定意味着“msg.get_content_maintype() == ‘multipart’”将返回 True。例如,当 EmailMessage 类型为 message/rfc822 时,is_multipart 将返回 True。orm
get_content_type()server
get_content_type()返回消息的内容类型,强制为表格 maintype/subtype 的小写。若是消息中没有 Content-Type 头,则返回 get_default_type() 返回的值。若是 Content-Type 头无效,则返回 text/plain。
(根据 RFC 2045,消息老是有一个默认类型,get_content_type() 将老是返回一个值。RFC 2045 定义一个消息的默认类型为 text/plain,除非它出如今一个 multipart/digest 容器中,在这种状况下,它将是 message/rfc822 若是 Content-Type 头有一个无效的类型规范,RFC 2045 强制默认类型为 text/plain。)