请问大家在做邮件客户端的时候,如何实现这个收件箱功能?就是第一次登录可以从远程服务器上收取邮件保存在本地。下次在本地可以直接查看这些邮件。数据库该怎么建?附件又该如何获取并保留在本地以便下次读取?发件箱也一样。。还有定时发送该如何实现??跪谢了!!!
1条回答 默认 最新
- maxabe 2009-11-30 03:45关注
首先声明 本人很菜~~~ :D
最近刚完成一个邮件系统的项目,针对你的问题,其实你根本没有有必要来设计数据库来存放邮件信息。你也知道是从远程服务器收取(其实是用流的方式将文件写到本地的eml文件中)到本地。在保存到本地之后,你查看一下保存目录应该是很多eml文件,那就是我们的邮件。所有的邮件都是以这种格式存储的。下载到本地以后这样就保存到本地了,在每次查看这封邮件的时候只需解析一下这个文件就OK了(在这里你要用到数据库,是不是要把邮件的内容,入 收件人,发见人,附件的下载链接存到里边呢?)。
至于附件的获取,在解析的时候就解决啦,我们知道邮件都是由base64编码组成的。并且是有基本分组成,理所当然附件也在这个eml文件中。把它对应的找到并且解析进行编码转换,在以文件流的形式写到附件文件夹。这样就得当并保存在本地了(大体的业务逻辑是这样的,具体的视情况而定~~),发件箱原理一样。注意:
其实针对不同的mail服务器,有些功能是没有必要实现的,当前用到得mail服务器无非就两种支持pop3和IMAP(当然支持imap的一般都支持pop3),对于pop3 和 imap的区别,简单的可以理解为imap是pop3协议的扩展。还是以发件箱为例:在只支持pop3协议的mail Server(例如 头几年用的比较广范的 window2003 里面的pop3服务器),在他里面只有一个收件箱(获取的时候用store.get("INBOx")),别的文件夹就要入发件箱,垃圾箱,草稿箱,都要在客户端自己建了。例如发件箱在你发送完当前这封邮件之后,在用流的形式把这封邮件的内容写到.eml,这样就构成了一个发件箱。想看发件箱的已发送邮件,在解析一下.eml文件就OK啦。而对于支持IMAP协议的Mail Server(用的比较广范的WinMail(一个商业化的mail服务器)),它里面就存在发件箱草稿箱等,这样你就不用自己用流的方式写到本地了,直接down下来就可以了。小弟不才,请多多指教.(在上班,不方便多说,如有疑惑Email:max_abe@yahoo.com.cn)
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报