Python poplib模块收取邮件实例教程

发布时间:2019-08-02编辑:脚本学堂
使用python poplib模块收取邮件的例子,python的poplib模块是用来从pop3收取邮件,poplib模块处理过程,需要的朋友参考下。

利用内置python poplib模块收取邮件

python的poplib模块是用来从pop3收取邮件的,也可以说它是处理邮件的第一步。

pop3主要命令码如下:
命令 poplib方法 参数 状态 描述
-----------------------------------------------------------
USER user username 认可 用户名,此命令与下面的pass命令若成功,将导致状态转换
PASS pass_ password 认可 用户密码
APOP apop Name,Digest 认可 Digest是MD5消息摘要
-----------------------------------------------------------
STAT stat None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL uidl [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST list [Msg#] 处理 返回邮件数量和每个邮件的大小
RETR retr [Msg#]    处理 返回由参数标识的邮件的全部文本
DELE dele [Msg#]    处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET rset None    处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP top [Msg#] 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP noop None 处理 服务器返回一个肯定的响应
--------------------------
QUIT quit     None 更新
--------------------------
对应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)

python收取邮件的例子:
 

复制代码 代码示例:
import poplib
import cStringIO
import email
import base64
# 服务器连接,认证
pop = poplib.POP3('pop.qq.com')
pop.user( 'rschdoc' )
pop.pass_( 'ilovemyself' )
# 取得邮件总数、邮件总字节数
totalNum, totalSize = pop.stat()
# 取得每一封mail
for i in range( numMessages )
m = pop.retr(i+1)
buf = cStringIO.StringIO()
# 将邮件内容存放在缓冲区中
for j in m[1]:
print >>buf,j
buf.seek(0)
# 形成mail message对象
msg = email.message_from_file( buf )
# 取出邮件中基本属性数据
subject =
email.Header.decode_header(msg['subject'])[0][0]
    subcode =
email.Header.decode_header(msg['subject'])[0][1]
    from =
email.Header.decode_header(msg['From'])[0][0]
    to =
email.Header.decode_header(msg['To'])[0][0]
    date =
email.Header.decode_header(msg['date'])[0][0]
# 确定是否有附件,处理附件
showMaessage( msg )
PareMessageAttachMent( msg )
def showMaessage( msg ):
if msg.is_multipart():
        for part in msg.get_payload():
            showMessage( part )
    else:
        types = msg.get_content_type()
        if types=='text/plain':
            try:
               body =msg.get_payload(decode=True)
               print body
            except:
               print '[*001*]BLANK'
        elif types=='text/base64':
            try:
               body =
base64.decodestring(msg.get_payload())
               print body
            except:
               print '[*001*]BLANK'
PATH='e:/mail/Attach/'
def PareMessageAttachMent( msg ):
   global PATH
   count=0
   ErrorList=[]
   # 取得附件部分
   for part in mail.walk():
      contenttype = part.get_content_type()
      filename = part.get_filename()
      if filename==None:
          continue
      filename = email.Header.decode_header(filename)[0][0]
filename = os.path.split(filename)[1]
# 防止文件名出现全路径错误
      if filename:
      ###解析邮件的附件内容
         fn=PATH+filename
         if os.path.exists(fn)==False:         
            f=open(fn,'wb')
            try:
if.write(base64.decodestring(part.get_payload()))
            except:
               pass
            f.close()
         else:
            continue