python 收取邮件poplib和imaplib

来源:互联网 发布:淘宝直播流量越来越少 编辑:程序博客网 时间:2024/06/05 12:50

#http://docs.python.org/library/poplib.html


import poplib
emailServer = poplib.POP3('pop3.139.com')
emailServer.user('xxxxxx')
emailServer.pass_('xxxxxx')

#打印欢迎信息
serverWelcome = emailServer.getwelcome() 
print serverWelcome

#保持连接
emailServer.noop()
#邮件的数量和大小
emailMsgNum, emailSize = emailServer.stat() 
print 'email number is %d and size is %d'%(emailMsgNum, emailSize)
emailServer.retr(1)
emailServer.list(1)
for i in range(emailMsgNum): 
    for piece in emailServer.retr(i+1)[1]: 
        if piece.startswith('Subject'): 
            print '\t' + piece 
            break
 
 
>>> import socket
>>> socket.setdefaulttimeout(10) # 10秒

 

-- imap4
http://docs.python.org/library/imaplib.html
#!/usr/bin/python
# -*- coding: latin-1 -*-
import imaplib
import time
import email
import re

mailServer = "imap.139.com"

mailUser  = "xxxxx"
mailPassWord = "xxxxx"
fromAddress = ['x@139.com','x@139.com','x@139.com',]
toAddress = 'xxx'
fileHandle = open( '/home/xwzhou/mailLog.log', 'a' ) 

#multiple payloads (plaintext/ html), you must parse each message separately.
def get_first_text_block(email_message_instance):
    maintype = email_message_instance.get_content_maintype()
    if maintype == 'multipart':
        for part in email_message_instance.get_payload():
            if part.get_content_maintype() == 'text':
                return part.get_payload()
    elif maintype == 'text':
        return email_message_instance.get_payload()


# connect to server


# login
while 1:
    imapServer = imaplib.IMAP4(mailServer)
    imapServer.login(mailUser, mailPassWord)
    imapServer.select()
    # list items on server
    #resp, items = server.search(None, "ALL")       #all Message.
    mailResp, mailItems = imapServer.search(None, "Recent")    #Message has not been read.
    #resp, items = server.search(None, "Seen")      #Message has been read.
    #resp, items = server.search(None, "Answered")   #Message has been answered.
    #resp, items = server.search(None, "Flagged")   #Message is "flagged" for urgent/special attention.
    #resp, items = server.search(None, "Deleted")   ##python无法看到已删除邮件                                                                      
    #resp, items = server.search(None, "Draft")     ##python无法看到草稿箱内的邮件
    for i in mailItems[0].split():
        resp, mailData = imapServer.fetch(i, "(RFC822)")    ##读取邮件信息
        mailText = mailData[0][1]
        mail_message = email.message_from_string(mailText)
        #showmessage(mail_message)
        mailContent = get_first_text_block(mail_message).strip()
        nowTime=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        if re.search('starWar', mail_message['subject']) and mail_message['from'] in fromAddress  and mail_message['to'] in toAddress:
           fileHandle.write('['+nowTime+'] '+ 'FROM:'+mail_message['from']+ ' To:'+mail_message['to']+' Subject:'+mail_message['subject']+' Content:'+mailContent+'\n')
           fileHandle.flush()
           print  nowTime+mailContent
        else:
           print  nowTime+'No match\n'          
    imapServer.close()
    imapServer.logout()
    time.sleep(0)
   """
    mailFile = StringIO.StringIO(mailText)
    mailMessage = rfc822.Message(mailFile)
    print message['from']
    newMail = dict(mailMessage.items())
    mailMessage.fp.read()
       #server.store(items[i], '+FLAGS', '\\Deleted')##删除指定的一份邮件
   """

0 0