色胃康胶囊 发表于 2017-5-2 10:35:06

python用pop3收取邮件下载附件

  python的poplib模块是用来从pop3收取邮件的,也可以说它是处理邮件的第一步。
POP3协议并不复杂,它也是采用的一问一答式的方式,你向服务器发送一个命令,服务器必然会回复一个信息。pop3命令码如下:
 命令 poplib方法    参数    状态     描述
-----------------------------------------------------------------------------------------------
USER  user   username  认可  用户名,此命令与下面的pass命令若成功,将导致状态转换
PASS  pass_   password  认可  用户密码   
APOP  apop   Name,Digest 认可  Digest是MD5消息摘要
-----------------------------------------------------------------------------------------------
STAT  stat   None    处理  请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL  uidl      处理  返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST  list      处理  返回邮件数量和每个邮件的大小
RETR  retr     处理  返回由参数标识的邮件的全部文本
DELE  dele     处理  服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET  rset   None   处理  服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP   top       处理  服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP  noop   None    处理  服务器返回一个肯定的响应
----------------------------------------------------------------------------------------------
QUIT  quit  None    更新     

python的poplib也针对这些命令分别提供了对应的方法,上面在第二列里已经标出来。收取邮件的过程一般是:
1. 连接pop3服务器 (poplib.POP3.__init__)
2. 发送用户名和密码进行验证 (poplib.POP3.user poplib.POP3.pass_)
3. 获取邮箱中信件信息 (poplib.POP3.stat)
4. 收取邮件 (poplib.POP3.retr)
5. 删除邮件 (poplib.POP3.dele)
6. 退出 (poplib.POP3.quit)
  程序尚未调试。。。。因为126不给俺调试。。。pop3要收钱。。。可恶。。

[*]importpoplib
[*]importcStringIO
[*]importemail
[*]importbase64
[*]
[*]#pop3getemail
[*]M=poplib.POP3('pop3.126.com')
[*]M.user('....')
[*]M.pass_('....')
[*]
[*]#numberofemails
[*]numMessages=len(M.list())
[*]print'numofmessages',numMessages
[*]
[*]foriinrange(numMessages):
[*]m=M.retr(i+1)
[*]
[*]buf=cStringIO.StringIO()
[*]forjinm:
[*]print>>buf,j
[*]buf.seek(0)
[*]
[*]#
[*]msg=email.message_from_file(buf)
[*]forpartinmsg.walk():
[*]contenttype=part.get_content_type()
[*]filename=part.get_filename()
[*]
[*]iffilenameandcontenttype=='application/octet-stream':
[*]#save
[*]f=open("mail%d.%s.attach"%(i+1,filename),'wb')
[*]f.write(base64.decodestring(part.get_payload()))
[*]f.close()

  
页: [1]
查看完整版本: python用pop3收取邮件下载附件