本文主要是介绍POP3邮件客户端程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
POP3(Post Office Protocol - Version 3)邮件客户端程序
1.简介:
之前我们写过smtp程序来发送邮件,但是不能接受邮件并查看。这次我们学习的POP3协议是解决这个问题的,主要用来登录服务器,查看收件箱邮件,进行一些简单的操作。
2.环境调试:
跟smtp协议一样。
3.过程:
1、特许阶段,用户代理发送用户名和口令
2、事务处理阶段:用户代理取回报文;还可以对报文做删除标记,取消报文删除标记,以及获取邮
件的统计信息
3、更新阶段:结束该POP3会话;这个时候该邮件服务器删除那些被标记的删除的报文。
4. 简单处理的代码(还可以再加其他功能):
主要参考一下几个相关函数的使用:
import poplib
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddrdef login_in():#登录阶段email=input('Email:')password=input('Password:')pop_server=input('Pop3 server:')global serverserver=poplib.POP3(pop_server)server.set_debuglevel(1)print(server.getwelcome().decode('utf-8'))server.user(email)server.pass_(password)def handle_command(user_cmd,email_title):#处理命令if user_cmd=='1':#list the main informationprint('Total message number: %s; Total size: %s;' % server.stat())elif user_cmd=='2':resp,lines,octets=server.retr(email_title)msg_content=b'\r\n'.join(lines).decode('utf-8')msg=Parser().parsestr(msg_content)print_infor(msg)else :print('error command!\n')def print_infor(msg,indent=0):#输出信息if indent==0:for header in ['From','To','Subject']:value=msg.get(header,'')if value:if header=='Subject':value=decode_str(value)else :hdr,addr=parseaddr(value)name=decode_str(hdr)value=u'%s <%s>'%(name,addr)print('%s%s: %s'%(' '*indent,header,value))if msg.is_multipart():parts=msg.get_payload()for n,part in enumerate(parts):print('%spart %s'%(' '*indent,n))print('%s---------------'%(' '*indent))print_infor(part,indent+1)else:content_type=msg.get_content_type()if content_type=='text/plain' or content_type=='text/html':content=msg.get_payload(decode=True)charset=guess_charset(msg)if charset:content=content.decode(charset)print('%sText: %s'%(' '*indent,content+'...'))else:print('%sAttachment :%s'%(' '*indent,content_type))def decode_str(s):#解码value,charset=decode_header(s)[0]if charset:value=value.decode(charset)return value;def guess_charset(msg):charset=msg.get_charset()if charset is None:content_type=msg.get('Content-Type','').lower()pos=content_type.find('charset=')if pos>=0:charset=content_type[pos+8:].strip()return charsetdef start():#开始login_in()resp,mails,octets=server.list()print(mails)index=len(mails)print('\n--------------------------------------------')print('input "0" you can quit\ninput "1" you can get the whole information.\ninput "2" you can see a specific email\n')print('--------------------------------------------\n')while(1):command=input("please input your commands:\n")if command=='0':break;elif command=='2':email_num=input("please input the email number you want to see:")handle_command(command,email_num)else:handle_command(command,0)print("\n")server.quit()print('you quit the pop3 successfully!')if __name__ == '__main__':start()
5.结果:
附:命令码(摘抄自百度百科):
注:以上所有操作均在作者在网上搜集资料后,在个人电脑上实验成功,若读者实验时失败,可能由一些未知因素导致,可与作者联系。编写的教程可能由于疏忽出错,请与作者联系。
这篇关于POP3邮件客户端程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!