首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程-> 移动开发教程
张小龙谈如何写e-mail软件_邮件服务器
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
  编者语:鼎鼎大名的Foxmail软件制作者,你一定不会陌生吧!本刊第三期特刊还刊登过此君的生活照一张,可谓威风八面。小编此次突发奇想,“死缠烂打”,费了九牛二虎之力,终于约他写了一篇有关写E-mail软件的文章,这可是大家之作哟!各位赶快来品尝吧!

张小龙谈如何写E-mail软件

  《新潮电子》的编辑向我约稿,而我一向都是懒得写文章的,但编辑说是写关于怎样写邮件软件的,因为很多读者对开发邮件程序感兴趣。我想这倒比其他内容好写些,因为开发foxmail的缘故,毕竟积累了一些想法。但因为是面向大众的文章,技术性又不能太强,因此主要从概念上说说我自己的看法。
  首先要确定的是你要开发的邮件软件的应用对象和范围。分为三类吧,第一类,你的目标是通用的E-mail软件,就像foxmail, outlook一样。第二类,是E-mail的一些分支,如邮件监测器(POP3 Monitor,自动检测服务器上是否有邮件到来),批量邮件发送器(bulk emailer)等。第三类,是将E-mail应用到某些软件项目中,比如,你可能须要在一个MIS项目中用E-mail来传输数据,或在Web上提供发送邮件的功能(如贺卡)。
  关于三种类型,他们的实现方法和难度是不一样的。为了讲解方便,我们将上面三种类型称为A类,B类和C类。其中A类因为用户的覆盖面最广,须要考虑的因素最多,对程序的稳定性和适应性要求也最大,B类次之。
  下面的内容主要集中在邮件相关知识上。我要强调的是,一个邮件软件,更多的是非网络的处理。因为邮件软件不同于其它的网络应用,邮件软件要更贴近用户,实际上是一个日常办公应用。事实上,在Foxmail中,网络部分的处理可能只用了10%的精力。

一、了解TCP/IP网络编程方法
  对于A类和部分B类应用,要求你自己编程实现基于TCP的邮件通讯。因此对TCP/IP编程的理解是必要的。而且一旦你掌握了TCP/IP的编程方法,你可以完成更多的网络程序,比如FTP, HTTP等。这里没法深入去讨论,因为这是一本书或几本书的内容。因此只能向你推荐我自己觉得必看的书目:

1.Internet的经典教材:
书名:Internetworking With TCP/IP。作者:Douglas E. Comer。出版:Prentice Hall。
中译本:《用TCP/IP进行网际互连》。出版:电子工业出版社。
这套书共有三卷。清华大学出版社在国内发行英文版,因为价格比国外买便宜,前不久我还在广州买了一套寄给在美国念书的朋友(邮费比书还贵)。

2.一本很好的关于Winsock编程的书
书名:《Internet编程》,电子工业出版社,1996。
这是一本翻译过来的书,详细讲解了TCP/IP编程的概念和方法。其中对Unix socket和Windows socket编程的区别,以及Windows下socket的同步和异步,消息和多线程等概念讲解透砌。1996年我就是因为看了这本书,萌发了写foxmail的想法。

二、了解电子邮件相关的标准
  对A类和B类应用,有必要非常熟悉网络协议,特别是与E-mail相关的RFC协议。RFC是Request for Comments的简称,Internet的绝大部分协议都是通过RFC的方式提供与更新的,比如我们常用的HTTP协议,就是由RFC2068 定义的。与E-mail相关(通讯,邮件格式,附件编码等)的协议有很多,以下是必须要看的RFC:
RFC 821 (SMTP,简单邮件传输协议,定义了发送邮件的机制)
RFC 822 (邮件格式定义)
RFC 1725 (POP3,邮局协议版本3,定义了从POP3服务器收取邮件的机制)
RFC 1521 (MIME标准)
RFC 1522 (MIME 标准2)
  在这里,因为篇幅关系,没有办法深入讲解,因此只能由读者自己查阅这些文档。这些文档可以在Internet上很多站点找到,比如http://www.cis.ohio-state.edu/htbin/rfc/INDEX.rfc.html就列出了全部的RFC文档。
对于C类应用(和部分B类应用),可以不去关心这些协议,因为你可以采用一些现成的控件来完成邮件的功能,封装得好的控件可以完全屏蔽掉这些实现细节。

三、非网络的因素
  如前面所说的,你须要投入更大的精力到其它非网络的部分的开发中,因为作为一个应用软件,你要细致地处理每个细节。但这里说的并不是各个特性细节的堆砌。比如对于A类应用,你须要做好合理的系统设计,然后对设计中的每个大模块找到好的实现方法。比如电子邮件的存储,我称它为邮箱文件系统,事实上是个基于索引的变长记录系统。如收件箱,由两个文件组成,In.ind是索引文件,记录了每个邮件的摘要信息(发件人,主题,日期等),更重要的是,每个邮件在数据文件中的位置;数据文件是in.box,简单地记录了每个邮件的原始内容。邮箱文件系统的原理并不难理解,难的是要保证其非常高的稳定性,因为邮箱文件的设计错误将直接导致邮件的丢失。
  就像浏览器的开发一样,浏览器的HTTP网络协议处理并不复杂,但HTML的显示要复杂得多。电子邮件也一样。但是在B类和C类应用中,问题比较简单,因为是特定的功能实现就可以了。

四、Winsock的消息和多线程
  对Winsock的异步机制的理解非常重要,对多线程的理解也很重要。很多人以为多线程可以解决任何问题,我想并不全是这样。Windows下的socket编程与Unix下的一个很大差别是,你可以将socket的事件与Windows的消息机制紧密联系起来,写出高效率的Winsock程序,这有赖与对Windows和Winsock的理解。如果须要用到多线程,须要周密考虑好线程同步问题,这不仅仅是对线程的理解,可能在规划的时候,就要考虑线程同步问题来。比如你有一个线程在从发件箱中发邮件,一个线程在接收邮件,还有一个线程(主线程)在显示或删除邮件,这些线程可能同时对同一个邮箱文件进行操作,如果不同步的话,后果将是邮箱文件被破坏。
  采用Winsock的基于消息的异步机制是个很好的选择,这样只有当有网络消息到来时,Winsock才发消息通知程序处理,程序不会停顿在等待或循环中。利用异步机制,须要构造好一个“状态机”,即你要让程序清楚知道目前处理到什么阶段了,当网络(服务器)需要数据时,程序才能知道下一步要发送什么数据出去。

五、开发工具的选择
  对于A类和部分B类应用,我想Visual C++和Delphi是比较好的选择。我个人在开发Foxmail的时候决定用Delphi,是因为它可以帮我省去许多设计界面的时间。而且Delphi具备C++的绝大部分优点,如真正的面向对象,运行的效率等,同时具有比C++更容易理解的语法。而且Internet上有许多Component可以参考,我常去的一个Delphi站点是http://sunsite.icm.edu.pl/delphi。
对于部分B类和C类应用,开发工具的选择面大很多,VC++, Delphi, VB, PowerBuilder,甚至Java等都是考虑的对象,就看你的应用方向了。如果基于现成的控件来做,一般是OCX的形式,OCX可以在绝大多数开发平台上使用。
  对于开发工具,我还想说的是,开发工具并不是最重要的,因为任何一种工具,必须用好它,才能发挥它的功能,而用好一个工具的基本点,是对编程的理解和掌握,与开发工具无关。

六、要不要熟悉TCP/IP和邮件协议?
  看了上面的介绍,可能很多读者会问,如果从头去学习TCP/IP编程,并掌握关于email的协议,会用去大量的时间,有没有更快速的方法呢?我想,同样得看你的应用目标是什么。比如,你只是想在一个MIS项目中包含电子邮件功能,当然没必要从底层开发所有的东西,你可以借助一个商业(甚至免费)的OCX来完成邮件功能。比如Delphi中,就包含了POP3和SMTP的OCX,可以直接应用。有了这些OCX,为什么还要自己从头开发呢?因为商业的OCX并不能保证它是功能齐全和稳定的,特别对于email来说,有许多非标准(或准标准)的因素存在,比如汉字的编码方法,这些国外出的OCX一般都没有考虑到。而且从稳定性上来说,email软件须要适应不同的网络和服务器,只有自己开发的,才能不断地改进。Internet上甚至还提供一些免费的源代码。这些代码只能作为参考,不要指望它们能解决所有问题。

七、小结
我担心读者看了上面的介绍,可能有些失望,因为只是些指导性的内容。但没办法,因为任何一个细节的深入探讨都将超出本文的篇幅,我也不想以偏概全。另外你可能觉得工作量太大,不过,如上面说的,如果你只是将邮件功能应用到一个小范围,是不需要这样专注的,但你对TCP/IP和E-mail标准的理解是有帮助的,而且也有助于你对其它网络协议的理解,如HTTP, FTP等。

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·ems图片格式转换(java)程序
·使用hashtable实现的购物车-ASP教程,ASP应用
·Java中数据库事务处理的实现-JSP教程,Java技巧及代码
·Oracle数据库操作类(c#)-.NET教程,C#语言
·移动短消息技术演进与业务发展浅析
·ASP生成静态网页,学习CASE的用法,以及“权限”的一种控制方法-ASP教程,组件开发
·中国电信发展移动通信的制式与频段选择
·ASP中access数据库的路径问题-ASP教程,数据库相关
·td-scdma系统移动台接入过程浅析
·JAVA与数据库连接方法(三)-JSP教程,数据库相关
最新文章
·fireworks表现vista毛玻璃朦胧效果_fireworks教程
·google adsense哪些情况会被k号_网赚技巧
·减少google adsense展示单元并不能提高收入_网赚技巧
·google adsense“允许域名”新功能很有用_网赚技巧
·于源:办南京人“淘宝”的大三学生_站长访谈
·谈谈网站策划和网站运营方面的点滴经验_站长心得
·美国网站兵败中国的10大思路性执行错误_站长心得
·付款流程中的电话确认_google推广
·google adsense的部分规则的背面_google推广
·googleadsense富翁排行榜最猛每月赚30万美元_google推广
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭