python接收邮件,读取邮件使用什么协议

  python接收邮件,读取邮件使用什么协议

  最近由于工作需要,对参会的代表发给我的姓名、电话、公司、行程车次等信息进行统计处理形成联系单,我的思路是:可以计算机编程语言利用持久性有机污染物协议自动收取邮件,熊猫数量对发来的数据进行处理并导出至Excel/MySQL数据库。

  收取邮件就是编写一个么么哒作为客户端,从单色显示适配卡(单色显示适配器)把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是持久性有机污染物协议,目前版本号是3,俗称POP3。

  POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和简单邮件传输协议协议很像,SMTP发送的也是经过编码后的一大段文本。

  要把POP3收取的文本变成可以阅读的邮件,还需要用电子邮件模块提供的各种类来解析原始文本,变成可阅读的邮件对象。

  所以,用计算机编程语言的府绸模块收取邮件分两步:第一步是用POP3协议把邮件获取到本地,第二步是用电子邮件模块把原始邮件解析为消息对象,然后,用适当的形式把邮件内容展示给用户。

  收取邮件

  导入弹出式菜单

  导入电子邮件

  导入系统

  从email.parser导入解析器

  从email.header导入解码_标题

  从email.utils导入parseaddr

  定义解码字符串:

  value,charset=decode _ header[0]

  如果字符集:

  值=值.解码(字符集)

  返回值

  def guess_charset(消息):

  # 先从味精对象获取编码:

  charset=msg.get_charset()

  如果字符集为无:

  # 如果获取不到,再从内容类型字段获取:

  内容类型=消息。get( Content-Type , ).下部()

  pos=内容类型。find( charset=)

  如果pos=0:

  charset=content_type[pos 8:]条状()

  返回字符集

  def get _ email _ headers(消息):

  # 邮件的从,到,主题存在于根对象上:

  标题={}

  对于[发件人,收件人,主题,日期]中的标题:

  value=msg.get(header,)

  如果值:

  if header==Date :

  标题[日期]=值

  if header==Subject :

  # 需要解码科目字符串:

  subject=decode_str(值)

  标题[主题]=主题

  否则:

  # 需要解码电子邮件地址:

  hdr,addr=parseaddr(value)

  name=decode_str(hdr)

  value=u%s %s %(名称,地址)

  if header==From :

  发件人地址=值

  标题[发件人]=发件人地址

  否则:

  收件人地址=值

  标题[收件人]=收件人地址

  内容类型=消息。获取内容类型()

  打印"标题内容类型:",内容类型

  返回标题

  #缩进用于缩进显示:

  def get_email_cntent(消息,基本保存路径):

  j=0

  内容=

  附件文件=[]

  对于message.walk()中的部分:

  j=j 1

  文件名=零件。获取文件名()

  内容类型=部分。获取内容类型()

  # 保存附件

  如果文件名:#附件

  #解码文件名

  h=电子邮件100 .头。标题(文件名)

  dh=电子邮件. Header.decode_header(h)

  文件名=dh[0][0]

  如果dh[0][1]: #如果包含编码的格式,则按照该格式解码

  文件名=unicode(文件名,dh[0][1])

  文件名=文件名。编码(“utf-8”)

  数据=零件。get _ payload(decode=True)

  att_file=open(基本保存路径文件名, wb )

  附件_文件。追加(文件名)

  属性_文件。写入(数据)

  att_file.close()

  elif contentType==text/plain 或contentType==text/html :

  # 保存正文

  数据=零件。get _ payload(decode=True)

  charset=guess_charset(部分)

  如果字符集:

  charset=charset.strip().拆分(;)[0]

  打印"字符集:",字符集

  data=data.decode(字符集)

  内容=数据

  返回内容,附件_文件

  if __name__==__main__ :

  # 输入邮件地址,口令和POP3服务器地址:

  emailaddress=邮箱地址

  # 注意使用开通POP,SMTP等的授权码

  密码=密码

  pop3_server=pop.163.com

  # 连接到POP3服务器:

  服务器=弹出式菜单pop 3(pop 3 _服务器)

  # 可以打开或关闭调试信息:

  # server.set_debuglevel(1)

  # POP3服务器的欢迎文字:

  print server.getwelcome()

  # 身份认证:

  服务器.用户(电子邮件地址)

  server.pass_(密码)

  # stat()返回邮件数量和占用空间:

  messagesCount,messagesSize=server.stat()

  打印"消息计数:",消息计数

  打印"消息大小:",消息大小

  #列表()返回所有邮件的编号:

  resp,mails,octets=server.list()

  打印- resp -

  打印响应#好的46 964346响应的状态邮件数量邮件占用的空间大小

  打印-邮件-

  打印邮件#所有邮件的编号及大小的编号列表,[1 2211 , 2 29908 ,]

  打印-八位字节-

  打印八位字节

  # 获取最新一封邮件,注意索引号从一开始:

  长度=长度(邮件)

  对于范围内的我(长度):

  resp,lines,octets=server.retr(i 1)

  # 获取最新一封邮件,注意索引号从一开始:

  #length=len(邮件)

  #对于范围内的我(长度):

  对于范围内的我(消息计数,-1,-1):

  resp,lines,octets=server.retr(i)

  #resp,lines,octets=server。retr(消息计数)

  行数存储了邮件的原始文本的每一行,

  # 可以获得整个邮件的原始文本:

  msg_content=\n .连接(线条)

  # 把邮件内容解析为消息对象:

  msg=Parser().语法分析字符串(消息内容)

  # 但是这个消息对象本身可能是一个模拟多部分对象,即包含嵌套的其他模拟库对象,

  # 嵌套可能还不止一层。所以我们要递归地打印出消息对象的层次结构:

  打印解析之后-

  base_save_path=/etc/cron.d/

  消息标题=获取电子邮件标题(消息)

  #print subject:,msg_headers[subject]

  #print from_address:,msg_headers[from]

  #print to_address:,msg_headers[to]

  #print date:,msg_headers[date]

  print argv[i],sys.argv[1]

  if msg _ headers[ subject ]==sys。argv[1]:

  内容,附件文件=获取电子邮件内容(消息,基本保存路径)

  破裂

  #打印内容:,内容

  #打印附件文件: ,附件文件

  #删除

  # server.dele(1)

  # 关闭连接:

  server.quit()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: