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邮件客户端程序相关推荐

  1. 计算机网络邮件客户编程,北京理工大学-计算机网络实践-实验4POP3邮件客户程序.docx...

    北京理工大学-计算机网络实践-实验4POP3邮件客户程序 实验四 POP3 邮件客户程序实验目的电子邮件 E-Mail 是Internet 中广泛使用的服务之一,在Internet 电子邮件系统中,邮 ...

  2. socket编程实现SMTP邮件客户端

    套接字编程作业3:邮件客户端 1.作业描述 <计算机网络:自顶向下方法>中第二章末尾给出了此编程作业的简单描述: 这个编程作业的目的是创建一个向任何接收方发送电子邮件的简单邮件客户.你的客 ...

  3. 邮件发送程序(添加附件发送)

    目标:实现一个基于Web的可以发送附件的邮件程序.(涉及的知识点:文件上传+邮件发送) 知识点引入: 文件上传:开发的Web应用是基于HTTP协议的,工作在Request/Response模式下.在这 ...

  4. 计网实验c/c++ 电子邮件客户端程序实现发送接收邮件

    参照教材 6.5 节原理,设计一个电子邮件客户端程序. 可实现发送与接受. 如果发送邮件出去接受不到请把代码中的输出注释取消,运行确定错误地点 不懂的评论问 base64在线转码: https://b ...

  5. linux c邮件客户端,[源码和文档分享]基于C语言和TCP Socket实现的Linux环境下的邮件收发客户端程序...

    一.项目题目及功能 项目题目:设计一个邮件收发客户端程序 功能:设置邮件账户.接收服务器和发送服务器等 接收邮件并显示在一个列表里 编写.发送新邮件 可暂不考虑邮件内容的编码/解码问题 删除邮件 邮件 ...

  6. ipad原始邮箱服务器端口,如何在iPhone/iPad/iPod touch邮件应用程序中创建帐户(默认POP3)?...

    下面向大家介绍如何使用iPhone/iPad/iPod touch上的邮件应用程序Mail创建 yeah 邮箱帐户,这里以iPod touch为例(iPhone/iPad中除了界面略有区别外,操作基本 ...

  7. C#获取邮件客户端保存的邮箱密码

    有时候邮件客户端记录了邮箱密码,但自己却忘记了,此时可以使用C#建立一个临时的"邮件服务器",截取密码: IPEndPoint ipEndPoint = new IPEndPoin ...

  8. linux 开源邮件 系统,4 个开源的命令行邮件客户端

    无论你承认与否,email并没有消亡.对那些对命令行至死不渝的 Linux 高级用户而言,离开 shell 转而使用传统的桌面或网页版邮件客户端并不适应.归根结底,命令行最善于处理文件,特别是文本文件 ...

  9. linux邮件收发程序流程图,[源码和文档分享]基于C语言和TCP Socket实现的Linux环境下的邮件收发客户端程序...

    一.项目题目及功能 项目题目:设计一个邮件收发客户端程序 功能:设置邮件账户.接收服务器和发送服务器等 接收邮件并显示在一个列表里 编写.发送新邮件 可暂不考虑邮件内容的编码/解码问题 删除邮件 邮件 ...

  10. 开源邮件客户端_排名前6位的开源桌面电子邮件客户端

    开源邮件客户端 本文最初于2015年10月8日发布,并进行了更新以反映新信息和项目更改. 移动和Web技术仍然没有使桌面过时,尽管有一些常规的说法相反,但桌面客户端似乎并不会很快消失. 并且有充分的理 ...

最新文章

  1. 深度学习在计算机视觉中的应用长篇综述
  2. 户频繁点击发送ajax请求
  3. 打印SAP ABAP web service call完整的payload
  4. opencv双目视觉标定、匹配和测量 (附代码)
  5. springboot公共模块打包_SpringBoot多模块项目打包方法(jar和war)
  6. 命令dd 及简单应用
  7. 微信小程序开发--uniapp
  8. 深度学习入门 基于python的理论和实践 第一章
  9. 为佳作喝彩: Google Play 2022 年度中国开发者最佳榜单
  10. php seek_cur,Golang中seek使用方法详解
  11. Java的小tips(1) ------关于“Java :找不到符号”类问题的解读
  12. 最新软件外包网站有哪些?
  13. excel表格横向纵向变换_什么是报表工具?和 EXCEL 有什么区别?
  14. subversion与TortoiseSVN的安装与使用
  15. 域控管理员账号登录Windows Server 2016服务器,鼠标点击声音、图标等设置报错 rundll32.exe Windows无法访问指定设备、路径或文件。
  16. 关于Python的Selenium框架全解,一篇完整的说明书
  17. 行列式按k行展开(拉普拉斯定理)
  18. webstorm mac 更新导致CPU过热过高
  19. 安卓刷机之pixel
  20. Taro/kbone/uni-app多端统一开发框架(小程序篇)

热门文章

  1. Mac 笔记本 对Micro sd卡烧制镜像详解
  2. 微信小程序添加字体图标
  3. oracle jde优势介绍,Oracle_JDE_EnterpriseOne模块的详细功能介绍
  4. 物流配送信息管理系统java_基于jsp的物流配送管理系统-JavaEE实现物流配送管理系统 - java项目源码...
  5. 免疫算法(Immune Algorithm,IA)实例详解
  6. A8. 无人机编队飞行定位分析与讨论-大结局
  7. 使用step7 v5.6创建工程、仿真操作
  8. 虚拟机里面主要涉及哪些功能,虚拟机管理需要哪些功能
  9. Android触控签名软件,Android Sign Kit(app一键签名)
  10. 如何利用UltraISO将系统镜像刻录到U盘上