邮件提醒插件(1) |
邮件提醒插件
让用户输入服务器地址和登录Notes的用户名以及口令... 2
概要 我们公司在给客户实施基于Notes的邮件系统,用户通过Web页面来收发邮件和其它公务处理,例如会签文件等.现在问题是,用户必须每天登录进我们的系统,才能看到新邮件.经过考虑,用户要求打开浏览器(简称IE),就能看到新邮件提醒和待办事宜提醒. 方案描述 看来用户其实是需要一个IE的工具条(简称ToolBar),效果如下: 图表 1邮件提醒界面 为了达到这个效果,需要分4步: 1. 在IE内增加一个ToolBar,用来显示邮件提醒信息 2. 让用户输入服务器地址和登录Notes的用户名以及口令 3. 邮件提醒插件从服务器取出最新邮件信息 4. 显示最新邮件信息 在IE内增加一个ToolBar 在Microsoft Developer Network (MSDN) 内有一篇”Adding Explorer Bars”文章,专门讲这个问题.先做好一个COM对象,然后把这个COM对象的CLSID注册到HKLM/Software/Microsoft/Internet Explorer/Toolbar下即可.对于我们这个插件,我先做了个COM, 然后在注册表增加一个字符串键,名字是'{9928F3DE-4DD9-4bcf-ADA1-4032CCB0A219}',值是 '邮件提醒’. 让用户输入服务器地址和登录Notes的用户名以及口令 做好ToolBar后,我在COM控件右边做了个”设置”按钮,点击它后,弹出一个设置界面,用户可以在这里输入服务器地址和登录Notes的用户名以及口令: 图表 2邮件提醒设置 邮件提醒插件从服务器取出最新邮件信息 拿到登录服务器的用户名和口令后,现在有两种方法从服务器得到最新邮件. 第一种方法是用标准POP3协议,连接到服务器的110端口取到数据. telnet 10.31.172.13 110 +OK Lotus Notes POP3 server version X2.0 ready on jiteinside/jite. user zhaowd +OK zhaowd, your papers please. pass ******* +OK zhaowd has 0 messages. stat +OK 0 0 图表 3用POP3协议得到最新邮件 用这种方式是不需要服务器端做任何工作,就可以得到最新邮件,但是不能得到待办事宜信息. 第二种方法是服务器端在Notes上做个过滤器,记录下新邮件的信息.然后再做个返回新邮件信息的网页,客户端(简称CLIENT)向服务器端请求这个网页. 用这个方法需要在服务器(简称SERVER)端做程序,但是灵活行强,并且满足我们的需要.因此我们就采用这种方法.当然,如何在SERVER端做程序,我就是外行了,这由我们的NOTES工程师来完成.但是下面介绍一下CLIENT向SERVER发起请求的过程和数据格式. |
邮件提醒插件(2) |
请求格式 客户端把用户名口令封装在URL内,向服务器请求信息。 假设服务器是10.31.172.13,用户名口令是zhaowd、password,那么请求URL就是: 图表 4CLIENT请求SERVER的URL格式 响应格式SERVER返回的页面除了一些html信息外,包含一个xml文档: <oamail> <unreadmail> <发件人>张三</发件人> <日期>2005-01-18 16:29:16</日期> <大小>1920</大小> <主题>测试 kk</主题> <UNID>9ACC39C6CC52908848256F8D002EA132</UNID> </unreadmail> <unreadmail> <发件人></发件人> <日期>2001-01-18 16:29:16</日期> <大小>4440</大小> <主题></主题> <UNID>9ACD39C6CC52908848256F8D002EA132</UNID> </unreadmail> </oamail> 图表 5 SERVER端返回的响应XML 响应内容编码如果XML字段如’主题’、’发件人’包含xml保留字符,例如 ‘>’、’<’,’ ‘等,服务器返回信息的时候需要编码,否则会破坏XML的完整性. 例如: ‘测<试> kk’ 被编码成 ‘测<试> kk’. 原字符 编码后 说明 < <
> >
& &
“ " 双引号 ‘ ' 单引号 空格 图表 6 XML特殊字符编码 拿到最新邮件信息后,接下来就是显示它们了。既然拿到了XML,最简单并具有扩展性的方式是写个XSL来把XML转换成网页(简称HTML)。我就做了个简单的XSL,以后如果用户感觉显示界面不漂亮,或者服务器端程序发生变化,我只要修改这个XSL即可。 <?xml version="1.0" encoding="gb2312"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="oamail"> <html> <body scroll="no" lang="ZH-CN" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" bgcolor="#d4d0c8"> <xsl:if test="count(unreadmail)=0"> <font color="#000000" size="2">没有新邮件</font> </xsl:if> <xsl:if test="count(unreadmail)>0"> <MARQUEE DIRECTION="LEFT" BEHAVIOR="SCROLL" SCROLLAMOUNT="2" SCROLLDELAY="50"> <font color="#000000" size="2">你有<xsl:value-of select="count(unreadmail)"/>封新邮件. </font> <xsl:for-each select="unreadmail"> <xsl:call-template name="unreadmail"/> </xsl:for-each> </MARQUEE> </xsl:if> </body> </html> </xsl:template> <xsl:template name="unreadmail"> <td> <font color="#000000" size="2"> 发件人:<xsl:value-of select="发件人"/> </font> </td> <td> <font color="#000000" size="2"> 主题:<xsl:value-of select="主题"/> </font> </td> <td> <font color="#000000" size="2"> 日期:<xsl:value-of select="日期"/> </font> </td> <td>|</td> </xsl:template> </xsl:stylesheet> 图表 7 转换XML的XSL 从上面的描述可以总结出,Server提供XML格式的最新邮件列表,Client通过HTTP向Server端发起请求。当Client拿到数据后,Client就用XSL转换XML并显示到网页中。 |