Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1407876
  • 博文数量: 247
  • 博客积分: 10147
  • 博客等级: 上将
  • 技术积分: 2776
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-24 15:18
文章分类

全部博文(247)

文章存档

2013年(11)

2012年(3)

2011年(20)

2010年(35)

2009年(91)

2008年(87)

我的朋友

分类: Python/Ruby

2013-03-19 14:07:42




这段代码的功能:
  1. 解析邮件
  2. 下载邮件
  3. 扫描邮件服务器
  4. 查看邮件服务器是否支持APOP传输,对传输数据进行加密
  5. 下载邮件到本地并删除
标签: <无>

[代码] [Python]代码

01 #!/usr/bin/env python
02 #-*-coding = UTF-8-*-
03 #POP_email.py
04 #auth@:xfk
05 #date@:2012-04-30
06 ################################################################
07 # WARNING: This program deletes mail from the specified mailbox.
08 #           Do Not point it to any mailbox you are care about!
09 ################################################################
10   
11 import getpass
12 import sys
13 import poplib
14 import email
15   
16 if len(sys.argv) < 4:
17     print "[*]usage:%s server fromaddr toaddr " % sys.argv[0]
18     sys.exit(1)
19   
20 (host,user,dest) = sys.argv[1:]
21 passwd = getpass.getpass()
22 destfd = open(dest,"at")
23       
24 p = poplib.POP3(host)           #如果服务器支持和需要APOP认证,APOP使用加密保护密码被窃取
25 try:
26     print "Attempting APOP authentication..."
27     print "Logging on..."
28     p.apop(user,passwd)
29     print "Success.\n"
30 except poplib.error_proto:
31     print "Attempting standard authentication..."
32     try:
33         print "Logging on..."
34         p.user(user)
35         p.pass_(passwd)
36         print "Success.\n"
37     except poplib.error_proto,e:
38         print "Login fialed:",e
39         sys.exit(1)
40 print "*****Scanning INBOX...*****"         #扫描服务器邮箱的邮件
41 mail_box_list = p.list()[1]
42 print "There is %d messages.\n" % len(mail_box_list)
43   
44 delelist = []           #要进行删除的又见队列
45   
46 for item in mail_box_list:
47     number,octets = item.split(' ')         #每一个元素之间有空格隔开
48     print "Downloading message %s (%s bytes)..." % (number,octets)
49     lines = p.retr(number)[1]           #下载邮件
50     msg = email.message_from_string("\n".join(lines))           #建立一个对象接受邮件内容
51     destfd.write(msg.as_string(unixfrom = 1))           #讲邮件内容写进目标文件
52     destfd.write("\n")
53     delelist.append(number)
54     print "Done !\n"
55 destfd.close()
56   
57 counter = 0
58 for number in delelist:
59     counter = counter + 1
60     print "Deleting message %d of %d \r" % (counter,len(delelist))
61     p.dele(number)          #删除邮件
62   
63 if counter > 0:
64     print "Successfully deleted %d message from server.\n" % counter
65 else:
66     print "No messages present to download.\n"
67   
68 print "Closing connection..."
69   
70 p.quit()            #断开连接
71 print "Done !\n"
阅读(1774) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~