免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10007 | 回复: 7
打印 上一主题 下一主题

开源python项目email程序,欢迎大家参加。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-05 13:42 |显示全部楼层 |倒序浏览
类似foxmail的email客户端软件,语言用python,界面用wxwindow,初步实现完整的email软件功能。
能够多平台运行。

大体框架
1,接收邮件。
2,发送邮件。
3,处理附件。

1,接收邮件。包括
   1,登陆服务器
   2,保存邮件数量,标题,单份邮件大小。
   3,处理邮件代码,包括gb2312,utf-8,(python列表里很多都是utf-8的邮件)
     4,处理特殊邮件,html格式等等。
   5,保存邮件,用自定格式保存到文本文件里。(foxmail就是这么做的)
2, 发送邮件
   1,处理邮件内容,编码,处理附件,等。

完整的还没有考虑好,基本上就这样。


初步的想法是,先完成一个console下的简单email程序处理,包括完整的email功能。接受,发送,账户名的保存,处理附件,处理编码,等等,目的是先熟悉python的email处理方法,在这里实现团队人员的技术同步。代码要考虑重用性,后面写GUI也需要用这些方法。
console完成后,设计mail程序界面,大体参照foxmail。到这里需要考虑到今后的维护,添加功能等等事项。

项目目前进展:
  基本上处于初期讨论阶段,关于如何分工,程序的框架都没有定案.请大家多出主意。

感兴趣的朋友请加入下面QQ群,有无经验没关系,重在参与。但是严禁在此群讨论任何无关项目的问题。]
项目QQ群:11477965
目前参与人员,nbfan,好风凭借力,吉力安_Gilea,九

项目FTP:ftp://218.75.16.103  passordw:pymail user:pymail

python处理mail资料
http://bbs.chinaunix.net/viewthr ... 1%26filter%3Ddigest

论坛徽章:
0
2 [报告]
发表于 2005-11-05 22:15 |显示全部楼层
原帖由 bleem1998 于 2005-11-5 21:14 发表
严重期待这个项目
我的Kmail前段时间死了几次
另我很失望
如果有稳定好用的python邮件工具我肯定使用
BTW
能否用pyGTK做界面呐



这种东西一个人做太枯燥,缺少人交流很快就会失去耐心。
大家一起来,能有人讨论讨论就不一样了,我也是一直想做,到了GUI部分,wxwindow资料太少,自己一个一个试,很快就没耐心了。
这次准本找大家一起完成这个项目,咱也搞个项目练习练习。

由于考虑到跨平台,GUI就选择了wxwindow,这个比较中性化,不像qt gtk,都是linux下的产物。

先做完整的console下的mail程序,然后再加GUI,欢迎加入。

论坛徽章:
0
3 [报告]
发表于 2005-11-07 10:56 |显示全部楼层
原帖由 quakelee 于 2005-11-6 21:55 发表
用啥来做解信库呢?


没明白你的意思.

论坛徽章:
0
4 [报告]
发表于 2005-11-07 10:57 |显示全部楼层
原帖由 myvm 于 2005-11-7 09:27 发表
我也想参加,可刚刚看完python,之前有bash shell 编程经验,可没用项目经验,
怕心有余,而力不足。


都是没什么经验的,目的就是学习.

论坛徽章:
0
5 [报告]
发表于 2005-11-07 10:58 |显示全部楼层
原帖由 limodou 于 2005-11-7 08:51 发表
最基本的可以使用email模块,还有其它的可能更现成的email的模块,不过不是标准模块了。


你说的是什么模块?可以看看参考一下.

论坛徽章:
0
6 [报告]
发表于 2005-11-07 15:05 |显示全部楼层
基本的功能函数.

  1. from email.MIMEText import MIMEText
  2. from email.MIMEMultipart import MIMEMultipart
  3. from email.Header import Header
  4. from email.Header import decode_header
  5. from types import *
  6. import smtplib,poplib,string,sys,os,email
  7. import cPickle

  8. def loadSaveMail():
  9.     maillist=[]
  10.     file=open('mail.box','r')
  11.     while 1:
  12.         try:
  13.             maillist.append(cPickle.load(file))
  14.         except EOFError:
  15.             break
  16.     return maillist

  17. def loadSub():
  18.     headlist=[]
  19.     file=open('mailsub.box','r')
  20.     while 1:
  21.         try:
  22.             headlist.append(cPickle.load(file))
  23.         except EOFError:
  24.             break
  25.     return headlist
  26.    
  27. def mailmessagelist():
  28.     list,octet=loadmail()
  29.     maillist=processmail(list)
  30.     return mailHeader(maillist[0],octet[0])

  31. def sendconfig():
  32.     SMTPname=raw_input('SMTPserverName?')
  33.     SMTPuser=raw_input('SMTPusername?')
  34.     SMTPpass=raw_input('SMTPServerPassword?')
  35.     To=raw_input('To?')
  36.     From=raw_input('From?')
  37.    
  38. def popconfig():
  39. ##    POPname=raw_input('POPServerName?')
  40. ##    POPuser=raw_input('POPusername?')
  41. ##    POPpass=raw_input('POPpassword?')
  42.     POPname='pop.mail.yahoo.com.cn'
  43.     POPuser='jason_learn'
  44.     POPpass='python'
  45.     return POPname,POPuser,POPpass

  46. def loadmail():
  47.     server=POPconnect()
  48.     maillist=[]
  49.     mailsize=[]
  50.     try:
  51.         (mailCount,mailByte)=server.stat()
  52.         for i in range(0,mailCount):
  53.             (hdr,message,octet)=server.retr(i+1)
  54.             maillist.append(email.message_from_string(string.join(message,'n')))
  55.             mailsize.append(octet)
  56.         for mail in maillist:
  57.             cPickle.dump([mail],open('mail.box','a'))
  58.             
  59.         return maillist,mailsize
  60.     finally:
  61.         server.quit()

  62.    
  63. def processmail(originalmail):
  64.     processmaillist=[]
  65.     for i in range(len(mailList)):
  66.         processmaillist.append(email.message_from_string(mailList[i]))
  67.     cPickle.dump(processmaillist,open("mail.box",'a'))
  68.     return processmaillist
  69.    

  70. def POPconnect():
  71.     sname,user,passwd=popconfig()
  72.     server=poplib.POP3(sname)
  73.     server.user(user)
  74.     server.pass_(passwd)
  75.     print server.getwelcome()
  76.     return server

  77. def SMTPconnect():
  78.     server=smtplib.SMTP(sname)
  79.     server.login(user,passwd)
  80.     return server

  81. def proFrom(From):
  82.     temp=[]
  83.     for head in decode_header(From):
  84.         if head[1]=='utf-8':
  85.             temp.append(unicode(head[0],'utf-8'))
  86.         else:
  87.             temp.append(head[0])
  88.     return string.join(temp,'')

  89. def proSubject(Subject):
  90.     temp=[]
  91.     for head in decode_header(Subject):
  92.         if head[1]=='utf-8':
  93.             temp.append(unicode(head[0],'utf-8'))
  94.         else:
  95.             temp.append(head[0])
  96.     return string.join(temp,'')

  97. def mailHeader(mail,size):
  98.     header=[]
  99.     header.append(proFrom(mail.get('from')))
  100.     header.append(proSubject(mail.get('subject')))
  101.     header.append(mail.get('date'))
  102.     header.append(str(size/1024)+"K")
  103.     cPickle.dump(header,open("mailsub.box",'a'))
  104.     return header

  105. def showmessage1(mail):
  106.     item = iter([mail])
  107.     stack = [item]
  108.     content=[]
  109.     while stack:
  110.         item = stack[-1]
  111.         try:
  112.             mail = item.next()
  113.             if mail.is_multipart():
  114.                 nitem = iter([m for m in mail.get_payload()])
  115.                 stack.append(nitem)
  116.             else:
  117.                 type=mail.get_content_charset()
  118.                 if type==None:
  119.                     content.append(mail.get_payload())
  120.                 else:
  121.                     content.append(unicode(mail.get_payload(decode='base64'),type))
  122.                     
  123.         except StopIteration:
  124.             stack.pop()
  125.     return string.join(content,'')
复制代码

论坛徽章:
0
7 [报告]
发表于 2005-11-08 14:31 |显示全部楼层
from email.Header import decode_header
处理信头。

from email.MIMEText import MIMEText
处理编码

from email.MIMEMultipart import MIMEMultipart
处理附件。

仔细看第一页给的帮助连接。  

这两天忙着应聘,过两天写详细的帮助上来。感兴趣的朋友先看看上面那些函数,处理基本邮件够用。
目前没有加处理附件的函数。

论坛徽章:
0
8 [报告]
发表于 2005-11-18 18:57 |显示全部楼层
找到工作了,试用期内,工作比较忙,email项目这段时间内肯定没有时间作,毕竟吃饭重要。
请大家多多包涵.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP