`
Marvin
  • 浏览: 5094 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

webmail开发小记

阅读更多
  最近这三个月是到北京以来最干燥的三个月,以至于我的mp3因为静电频频重启,垃圾sony!鼻孔开始起皮皮、嘴也开始裂口子,唇膏什么的根本不管用,喝水才素王道,于是每天一个小时一趟厕所,也好能多活动活动。
 
  八月底开始着手做webmail的时候想从网上搜些信息参考,能找到的基本都是介绍javamail的API,几乎找不到什么开发webmail思路的资料。目前我们的项目已经到了收尾阶段,也比较闲,我想总结一下我的思路,与同学们共同学习。

  我们邮件服务器用的是开源的James,由于当前版本不支持IMAP所以只能用POP3协议。使用POP3协议在开发上会带来很多麻烦,比如POP3服务器只有INBOX文件夹、不能为邮件加标签等,这些问题我是这样考虑的,先从服务器上收邮件,把邮件主要的头信息和相关信息存数据库,如:邮箱地址、标题、大小、是否已读、发件人等等;邮件存本地硬盘,只有读某封邮件的时候再从硬盘上读(类似上传附件的思路),当然也可以存数据库,不过如果邮件很大这张表就太恐怖了。

  这样做每次收邮件都会从服务器上删除已收到的,没有解决的问题是如何不从服务器上删除而又不会每次收都收到重复的,百思不得其解,时间关系也没有再仔细研究。

  webmail部分的邮件过滤其实很简单,因为规则是用户订的,可以允许客户匹配标题、发件人、内容等等。接收邮件的同时匹配一下,如果符合过滤规则把记录的状态改成垃圾邮件箱或拒收就是了。阻止发件人的功能也是这么做的,其实邮件服务器上还是收到了这封邮件,只不过没有收到webmail里。

  别的好像也没有什么好说的,不是说开发过程中没有遇到什么问题,相反,我们不断碰到问题解决问题,不过没有多少太深刻的,很多朋友可能对解析邮件比较头大,我说一下我的思路,也欢迎大家一起讨论

  邮件的结构如下图所示,如果能吃透这张图,解析起来就明朗多了。我们要做的是判断Part是什么类型
if (!part.isMimeType("text/rfc822-headers") && part.isMimeType("text/*")){
//说明这部分是邮件内容
//注意内容分为text/plain和text/html两种 显示的时候要区别
}else if (p.isMimeType("multipart/*")) {
//遍历Multipart中的part 逐一递归本方法
}else if (p.isMimeType("message/rfc822")) {
//递归调用本方法
}else {
//这时很有可能说明改part是附件 按附件处理
}

这里每步解析都可能会抛异常,那也没办法,不与理睬,不过一封正常的邮件应该没什么问题


p.s. 前半部分是年前写的,一直在草稿箱里,今天忽然想起来了赶紧补充一下,相关问题欢迎交流讨论
  • 大小: 57.8 KB
分享到:
评论
3 楼 fishelf 2008-03-29  
顶顶~~~~~~~~~~··
2 楼 Marvin 2008-03-28  
多谢前辈启发,小弟以前对webmail没有一点了解,硬着头皮上的,都是凭想象和参照claros的in touch做的。
引用
webmail 必须直接从邮件系统底层入手做。如果基于 pop3 和 imap 协议来做,邮件量一大就挂了。

请问从系统底层入手是使用java还是其他语言,能不能再说的详细一点,我们的客户是局机关,最多的点也就百十来人,目前测试还算顺利。
引用
例如垃圾邮件处理。绝大部分垃圾邮件都有一个特征,就是格式不规范。所以在 smtp 那里入手就可以确保垃圾邮件不进入系统。然后白名单、黑名单等,都要在这里做。不然你黑名单上的人给你发信,一样发进来了。只不过 webmail 显示的时候给过滤掉了。

垃圾邮件的过滤一直比较头疼,邮件服务器用的是james,拿来改了改,能保证一些规则的邮件不进到james里,(至于webmail的过滤规则是用户定的,是从james到webmail时的过滤,)但是过滤效果一直不好,还没摸着规律。郁闷中..........
引用
还有邮件解析,也不能显示的时候才去读出来解析,那样的话碰上个一些带有大附件的邮件,会死得很难看。应该是邮件分发的地方就对邮件解析(实际上这里本来就要解析的),然后把部分解析结果存储起来。webmail 到时候调用来显示就行了。比如说邮件列表要显示邮件有没有附件、附件多大、是什么类型的,这个需求靠显示时解析是不现实的。

这个基本上和前辈说的差不多,我们也做过测试,速度还凑合
引用
以前我就是做 webmail 的,当初做新产品曾经想过基于 imap 协议来做。因为 imap 协议不用读取整个邮件就可以获得信件头等信息。但后来做起来才发现标准的 imap 提供的功能根本不够,如果要扩展 imap 协议,还不如从底层邮件系统入手。

现在 postfix 是扩展能力、性能、安全性各方面都比较平衡的邮件系统,用来做底层比较方便。qmail 就太老了,而且很多功能都是靠第三方程序来实现。


还有我想请教一下文中提出的问题,webmail收邮件时邮件服务器上保存邮件(如果现在这样做的话webmail再收信又会把收过的邮件再收一遍),请问前辈有没有解决的方案?
1 楼 dualface 2008-03-28  
这样做出来的 webmail 是没法用的。

webmail 必须直接从邮件系统底层入手做。如果基于 pop3 和 imap 协议来做,邮件量一大就挂了。

例如垃圾邮件处理。绝大部分垃圾邮件都有一个特征,就是格式不规范。所以在 smtp 那里入手就可以确保垃圾邮件不进入系统。然后白名单、黑名单等,都要在这里做。不然你黑名单上的人给你发信,一样发进来了。只不过 webmail 显示的时候给过滤掉了。

还有邮件解析,也不能显示的时候才去读出来解析,那样的话碰上个一些带有大附件的邮件,会死得很难看。应该是邮件分发的地方就对邮件解析(实际上这里本来就要解析的),然后把部分解析结果存储起来。webmail 到时候调用来显示就行了。比如说邮件列表要显示邮件有没有附件、附件多大、是什么类型的,这个需求靠显示时解析是不现实的。

以前我就是做 webmail 的,当初做新产品曾经想过基于 imap 协议来做。因为 imap 协议不用读取整个邮件就可以获得信件头等信息。但后来做起来才发现标准的 imap 提供的功能根本不够,如果要扩展 imap 协议,还不如从底层邮件系统入手。

现在 postfix 是扩展能力、性能、安全性各方面都比较平衡的邮件系统,用来做底层比较方便。qmail 就太老了,而且很多功能都是靠第三方程序来实现。

相关推荐

    webmail

    【Webmail】是一种基于网页的电子邮件服务,允许用户通过浏览器收发邮件,无需在本地计算机上安装特定的邮件客户端软件。这种服务对于那些在不同设备间切换工作或旅行中的用户非常方便,因为只需要一个网络连接就...

    Delphi开发WebMail程序

    在本篇内容中,我们将探讨如何使用Delphi开发一个简单的WebMail程序,这是一个允许用户通过网页发送邮件的应用。Delphi作为一个强大的Windows应用程序开发环境,它提供了丰富的组件和对象,使得开发Web Server程序变...

    webmail_webmail_

    这个源代码可能是某个开源webmail项目的最新版本,提供给开发者进行学习、分析或自定义开发。 PHP是一种广泛使用的开源脚本语言,尤其适合于Web开发。在webmail应用中,PHP主要负责处理用户请求,与邮件服务器交互...

    监听WebMail发信交互过程

    在该实验中,选用的工具是Libnids,这是一个基于libpcap和libnet的网络入侵检测开发包,其功能是模仿Linux内核中的TCP/IP协议栈,特别之处在于它支持TCP数据流的重组,这对于解析分段的TCP数据包至关重要。在WebMail...

    邮件系统webmail版

    Webmail邮件系统是一种基于Web的电子邮件服务,用户可以通过浏览器访问并管理自己的邮件。在这个系统中,我们关注的是基于jsp+javabean+servlet技术的实现。这种架构是Java Web开发中常见的一种组合,用于构建动态、...

    webmail 3.9.0 含注册机

    Webmail 3.9.0 是一款邮件服务器软件,它允许用户通过网页界面管理他们的电子邮件。这个版本的 Webmail 包含了一个注册机,这通常是为了规避软件的授权机制,以便用户无需购买即可使用全部功能。然而,值得注意的是...

    最新仿网易php的webmail系统

    "最新仿网易php的webmail系统"是这样一款基于PHP语言开发的Webmail应用,旨在提供类似网易邮箱的用户体验,且兼容各种邮件服务器平台。 PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域中被广泛应用。它支持...

    HMail Server+WebMail搭建邮件服务器+详细说明.rar

    前者可能是基于.NET开发的WebMail解决方案,而后者是基于PHP的WebMail程序,例如Horde或SquirrelMail。无论选择哪种,它们都允许用户无需安装任何软件就能通过Web界面收发邮件。 安装WebMail程序时,需要: 1. 将...

    webmail搭建资源包

    Webmail搭建资源包是一个集合了所需工具和指南的压缩文件,旨在帮助用户在自己的服务器上部署和配置Webmail系统。Webmail是一种通过网页界面访问和管理电子邮件的服务,它允许用户无需借助传统邮件客户端就能收发...

    HmaiServer邮件服务器及AfterLogic webmail安装配置向导.pdf

    HMaiServer 邮件服务器及 AfterLogic webmail 安装配置向导 HMaiServer 邮件服务器是一个开源免费的 mail 服务软件,支持 POP3、SMTP、IMAP 服务、多域名、或 MSSQL 后端支持、web 管理界面等等功能。以下是 ...

    webmail源码nocc-1.9.7

    这个版本(1.9.7)是NOCC开发的一个重要里程碑,它提供了对多种邮件协议的支持以及多语言界面,使全球用户都能方便地使用。 1. **邮件协议支持**: NOCC的核心功能之一是它能够与IMAP(Internet Message Access ...

    用java开发WebMail指南

    ### 用Java开发WebMail指南 #### 相关协议 在深入探讨如何使用Java开发WebMail之前,我们首先需要了解几种关键的电子邮件协议,这些协议是实现WebMail系统的基础。 ##### SMTP (Simple Mail Transfer Protocol) ...

    AfterLogic WebMail Lite PHP v7.7.9

    AfterLogic WebMail Lite PHP v7.7.9 To start automatic installation, run http://your_webmail_web_address/install/ in your web browser. Installation instructions are available at: ...

    webmail_php.zip

    这样的组合通常被称为WAMP(Windows、Apache、MySQL、PHP)服务器,它为在本地计算机上开发和测试PHP驱动的Web应用程序,特别是Webmail系统提供了便捷的平台。 【描述】中提到,这个压缩包是"一个windows下的apache...

    afterlogic webmail

    "afterlogic webmail" 是一款专业的Web邮件客户端软件,它提供了在网页浏览器中访问和管理电子邮件的功能。这个压缩包包含了用户需要的完整组件,解决了从官网下载时可能遇到的文件缺失问题,确保用户可以直接解压并...

    PHP实例开发源码-webmail客户端 NOCC.zip

    【PHP实例开发源码-webmail客户端 NOCC.zip】是一个基于PHP语言实现的Webmail客户端源码,它允许用户通过Web浏览器来收发电子邮件。在深入理解这个实例之前,我们需要了解PHP的基本概念以及Webmail系统的工作原理。 ...

    webmail_java

    本文将深入探讨Java WebMail的开发原理、关键技术以及实现过程。 1. **基础架构** Java WebMail的核心是基于Java Servlet和JavaServer Pages (JSP) 技术。Servlet负责处理HTTP请求,JSP则用于生成动态网页内容。...

    一个PHP写的WebMail邮局.rar

    【描述】"NOCC一个PHP写的WebMail邮局"指出这个WebMail系统可能是由NOCC(可能是一个开源项目或者开发团队的名称)开发的。NOCC可能代表了开发者社区或项目的名字,意味着这个WebMail解决方案具有一定的社区支持和...

    webmail 软件包

    【标题】:“Webmail软件包”是指用于在Web浏览器中访问和管理电子邮件的服务或应用程序。这类软件通常由服务器端组件和客户端界面两部分组成,允许用户通过互联网进行邮件收发,而无需安装本地邮件客户端。 【描述...

Global site tag (gtag.js) - Google Analytics