python之POP詳解

fmms 12年前發布 | 35K 次閱讀 Python開發 Python

這段代碼的功能:

  1. 解析郵件
  2. 下載郵件
  3. 掃描郵件服務器
  4. 查看郵件服務器是否支持APOP傳輸,對傳輸數據進行加密
  5. 下載郵件到本地并刪除
  6. </ol>

    #!/usr/bin/env python
    #-*-coding = UTF-8-*-
    #POP_email.py
    #auth@:xfk
    #date@:2012-04-30
    ################################################################
    # WARNING: This program deletes mail from the specified mailbox.
    #           Do Not point it to any mailbox you are care about!
    ################################################################
    
    import getpass
    import sys
    import poplib
    import email
    
    if len(sys.argv) < 4:
        print "[*]usage:%s server fromaddr toaddr " % sys.argv[0]
        sys.exit(1)
    
    (host,user,dest) = sys.argv[1:]
    passwd = getpass.getpass()
    destfd = open(dest,"at")
    
    p = poplib.POP3(host)           #如果服務器支持和需要APOP認證,APOP使用加密保護密碼被竊取
    try:
        print "Attempting APOP authentication..."
        print "Logging on..."
        p.apop(user,passwd)
        print "Success.\n"
    except poplib.error_proto:
        print "Attempting standard authentication..."
        try:
            print "Logging on..."
            p.user(user)
            p.pass_(passwd)
            print "Success.\n"
        except poplib.error_proto,e:
            print "Login fialed:",e
            sys.exit(1)
    print "*****Scanning INBOX...*****"         #掃描服務器郵箱的郵件
    mail_box_list = p.list()[1]
    print "There is %d messages.\n" % len(mail_box_list)
    
    delelist = []           #要進行刪除的又見隊列
    
    for item in mail_box_list:
        number,octets = item.split(' ')         #每一個元素之間有空格隔開
        print "Downloading message %s (%s bytes)..." % (number,octets)
        lines = p.retr(number)[1]           #下載郵件
        msg = email.message_from_string("\n".join(lines))           #建立一個對象接受郵件內容
        destfd.write(msg.as_string(unixfrom = 1))           #講郵件內容寫進目標文件
        destfd.write("\n")
        delelist.append(number)
        print "Done !\n"
    destfd.close()
    
    counter = 0
    for number in delelist:
        counter = counter + 1
        print "Deleting message %d of %d \r" % (counter,len(delelist))
        p.dele(number)          #刪除郵件
    
    if counter > 0:
        print "Successfully deleted %d message from server.\n" % counter
    else:
        print "No messages present to download.\n"
    
    print "Closing connection..."
    
    p.quit()            #斷開連接
    print "Done !\n"

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!