python之POP詳解
這段代碼的功能:
- 解析郵件
- 下載郵件
- 掃描郵件服務器
- 查看郵件服務器是否支持APOP傳輸,對傳輸數據進行加密
- 下載郵件到本地并刪除 </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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!