Python 编程范例:网络应用-邮件处理

上一篇 / 下一篇  2008-10-28 22:14:45 / 个人分类:python

  • 文件版本: V1.0
  • 开发商: 本站原创
  • 文件来源: 本地
  • 界面语言: 简体中文
  • 授权方式: 免费
  • 运行平台: Win9X/Win2000/WinXP

1 电子邮件标题撷取

V fl Z}0一般收取电子邮件的方法是利用邮件伺服器的 pop3通讯协定 (基本设定为埠 110)。其操作是很简单的:

+~tcUI$hz0试开一个远端登入的请求并键入下面的命令:51Testing软件测试网/Ok}0a8vX4~r f)n

示范 1.  
telnet yourpop3host   110         
user yourname         #提交用户名  
pass xxxxxxx          #提交密码  
stat                  #统计一下有多少信件  
+ok 1 1573            #一封信,共 1573字元  
list                  #列出信件明细表  
: 
: 
top 1 2               #写出第 1封信内容的头 2行  
quit                  #离开 (另外还有 dele  和 retr  命令可以用 )
51Testing软件测试网I Y/N7MRG/{|

就是这样而已。非常简单的协定。好了,假设我们能有办法用程式模拟以上的键盘动作,那我们就可以有一个简单的收件工具了。为了快,我们每次只读邮件标题的内容 (top n 0) 就行了。利用 python,这个程式可以很快地开发出来。这是因为 python 已有了一个叫做 poplib 的函数库是专门做 pop3协定的。像这样:51Testing软件测试网gI$Pn:F

51Testing软件测试网6?ltGAALe#s9J|9wE

1# mailh.py2#!/usr/bin/evn python3#记住 user-pass-stat/list-top-dele/retr-quit这用法45importpoplib,getpass,string,sys#先载入要用的函式库67host=raw_input("The hostname: ")# raw_input()从 stdin 读取字串8if(len(host))==0:#如果用户什么也不打,就用基本设定好了,自己方便嘛9host='your pop3 host'10username='yourname'11password='yourpass'12else:13username=raw_input("your username: ")14password=getpass.getpass()# getpass.getpass()会读取密码,和15# raw_input()一样,只是不把键值输出到萤幕而已1617try:18sess=poplib.POP3(host)#打开 pop3 连接,得到一个该连线的实体19sess.user(username)#向 pop3连线输出用户名20sess.pass_(password)#再来是密码21except:#如果上面三行出错了,就表示连线有问题,干脆走人啦22print"O^O, there is an error in opening connection!"23sys.exit()2425nMess=sess.stat()[0]#问一下到底有多少信26headers=[]#这个本程式不会用到,但将来扩展时或许有用27foriinrange(1,nMess+1):# Python 的 range()是从 0开始数,但邮件序号是从一开始的28print29mesg=sess.top(i,0)#用 top 指令读信件的头几行,这里 mesg[0] 是一30#些资料, mesg[1]则是字串类的一个序列31printi,mesg[0]32forjinrange(len(mesg[1])):#这个回圈尝试把寄件人,收件人,主题等资料抽出来33ifmesg[1][j][0:5]=='From:'ormesg[1][j][0:5]=='Date:'\34ormesg[1][j][0:8]=='Subject:'ormesg[1][j][0:3]=='To:':35printmesg[1][j]36headers.append(mesg[1][j])#存起来,本程式不会用到3738ifnMess>0:39print"Received %i message total."%(nMess)40else:41print"Nop, no mail on ",host,"for",username4243sess.quit()#结束

J StJ6^ W"@0基本上你不看右面的说明,应该也知道这个程式在做什么吧。难也许就难在逐样记住那些函 数罢了。不过放心,对于 Python用户,因为有内省这个功能, 绝对是很容易的事。51Testing软件测试网$fBL$u8Y

你有没有试过收到一些很大很大的垃圾邮件,用 modem下载的话很浪费,但是一般的邮件程 式则一定要一封接一封的下载。很头痛吧,这个小程式就有用了,你可以让它在读完标头后 问一下有哪些邮件是要删除的然后把它们移走。这很难么?不,只要加多 5行码就行了:51Testing软件测试网yI^u8@ N

^urYe0
if nMess>0: 
 print   "Received %i message total."%(nMess) 
else: 
 print   "Nop, no mail on', host, 'for', username 
 
改成 : 
 
if nMess>0: 
 print   "Received %i message total."%(nMess) 
 todele   = string.split(raw_input("dele   which   ones:")) 
 for   i   in   todele: 
     if   i   !='0': 
       sess.dele(int(i)) 
else: 
 print   "Nop, no mail on', host, 'for', username

TAG: python

 

评分:0

我来说两句

Open Toolbar