由于工作需要不得不修改MDAEMON的Webmail,修改后总结了几条、也发现了几个问题,写出来和大家讨论讨论,附上一个小弟我做的main.html页的例子,大家一起研究。
说明:
1. 路径说明:
此次修改都是以/MDaemon/WorldClient/Templates/Standard目录下的文件为基本模板,修改全在此基础之上。
/MDaemon/WorldClient/Templates目录为模板目录,修改后的模板文件要覆盖此目录下的所有同名文件,以避免使用时出现不同模板的情况。
/MDaemon/WorldClient/HTML目录为WEBMAIL的主目录,此目录的文件可以在IIS中访问到,目录中存放的为IMG和CSS类型文件。浏览的过程中加载到模板中发送到客户端,形成浏览界面。所以在此目录中增加新文件才可以用相对路径的形式引用。
2. 文件说明:
/MDaemon/WorldClient/HTML/WorldClient.dll,此文件是WEBMAIL的功能文件,所有浏览都由它解释、运行。接受参数传入,如:http://localhost:3000/WorldClient.dll?View=Main&user=sun&password=123456。此意义为用sun密码123456登陆。
3. 代码说明:
在模板文件中支持MDAEMON特定的代码,<$CODE$>格式表示的是代码部分,多位系统变量,如:<$THEME$>根据当前配置解释为Standard、Simple等,<$LINKS$>解释为链接“http://..../WorldClient.dll?Session=????”。[$CODE$]格式为多语言支持用于显示文本的代码,多用于提示信息等,如:[$Size$]表示为中文文本“大小”,如果是英文配置则为“SIZE”。
4. 修改方法:
增加、删除、修改相对应位置的代码即可。
技巧:?可以在浏览的时候点右键看属性来查找相应的要修改的代码位置
?不通过IIS,直接双击HTML文件查看,这样更明显。
5. 部分页的作用说明
文件名 说明
Menu.html 工具栏页
List.html 邮件列表页
Message.html 邮件详细页
Options.html 功能选项页
Options-Prefs.html 个性化设置页
Options-Compose.html 撰写功能选项页
Options-Folders.html 文件夹功能页
Logon.html 登陆页
AddrLookup.html 查找地址页
Compose-Attach.html 添加附件页
Compose.html 写邮件页
很多朋友都想到用自己的frame,因为这样可以集成到自己想要的地方去,经过小弟我研究,自己试着做了一个,功能实现了,就是方法有些笨,希望有大侠指点一二。
main.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<html>
<head>
<title>Frameset Template</title>
</head>
<frameset rows="64,*">
<frame name="banner" scrolling="no" noresize>
<frameset cols="150,*">
<frame name="menu" src="left.htm">
<frame name="main">
</frameset>
<noframes>
<p>This page requires frames, but your browser does not support them.</p>
</noframes>
</frameset>
</html>
其实这个简单,关键在于那个left.htm
left.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd";>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>left</title>
</head>
<script language=javascript>
function cmdurl(cmd)
{
ur="http://localhost:3000/WorldClient.dll?View=Main&user=sun&password=123456&logon=no&cmd=";;
ur=ur+cmd;
parent.main.location.href=ur;
}
function logon()
{
parent.main.location.href="http://localhost:3000";;
}
</script>
<body>
<p><a href="javascript:cmdurl('compose');">写邮件</a></p>
<p><a href="javascript:cmdurl('index');">收件箱</a></p>
<p><a href="javascript:cmdurl('drafts');">草稿箱</a></p>
<p><a href="javascript:cmdurl('sent');">发件箱</a></p>
<p><a href="javascript:cmdurl('deleted');">回收站</a></p>
<p><a href="javascript:logon();"</a>登陆口</p>
</body>
</html>
说明一下,我是用cmd=""这样把参数传递给邮件服务器的,但它本身不能解释,所以要在下一步自己处理,那个logon参数是小弟特殊自用,稍后解释。那个user和password就根据你自己的需要了,这个传入它就是模拟了登陆过程。
下面就是修改MDAEMON自己的那个main.html页了
此页的路径为/MDaemon/WorldClient/Templates/Standard,这里我用的风格是standard配置,其他的风格可修改对应文件夹下的文件即可。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>WorldClient</title>
<script type="text/javascript">
function QueryString(){//构造参数对象并初始化
var name,value,i;
var str=location.href;//获得浏览器地址栏URL串
var num=str.indexOf("?")
str=str.substr(num+1);//截取“?”后面的参数串
var arrtmp=str.split("&");//将各参数分离形成参数数组
for(i=0;i < arrtmp.length;i++){
num=arrtmp[i].indexOf("=");
if(num>0){
name=arrtmp[i].substring(0,num);//取得参数名称
value=arrtmp[i].substr(num+1);//取得参数值
this[name]=value;//定义对象属性并初始化
}
}
}
var Request=new QueryString();//
var cmdstr = Request["cmd"];
var fr_url="<$Link$>&View=<$FRAMEVIEW$>";
var logon = Request["logon"]
if(cmdstr=="compose")
{
fr_url="<$LINK$>&View=Compose&New=Yes";
};
if(cmdstr=="index")
{
fr_url="<$LINK$>&View=List&Folder=Index";
};
if(cmdstr=="drafts")
{
fr_url="<$LINK$>&View=list&Folder=Drafts";
};
if(cmdstr=="sent")
{
fr_url="<$LINK$>&View=list&Folder=Sent Items";
};
if(cmdstr=="deleted")
{
fr_url="<$LINK$>&View=list&Folder=Deleted Items";
};
if(logon=="no")
{
document.write("<frameset rows='0, *' frameborder='0' border='0' framespacing='0' bordercolor='#000000'>");
document.write("<frame name='Menu' src='<$Link$>&View=Menu' scrolling='no' noresize frameborder='0' bordercolor='#000000'>");
document.write("<frame name='Main' src='"+fr_url+"' scrolling='auto' noresize>");
document.write("</frameset>");
fr_url=null;
}
else
{
document.write("<frameset cols='135, *' frameborder='0' border='0' framespacing='0' bordercolor='#000000'>");
document.write("<frame name='Menu' src='<$Link$>&View=Menu' scrolling='auto' noresize frameborder='0' bordercolor='#000000'>");
document.write("<frame name='Main' src='<$Link$>&View=<$FRAMEVIEW$>' scrolling='auto' noresize>");
document.write("</frameset>");
}
</script>
</head>
</html>
最前面的代码部分是解释我传入的参数,根据参数指定要显示的页。这样就达到了集成的目的,集成时,我把menu框架的高度设置成了0,相当于把它隐藏了。
现在解释一下logon参数的作用,因为这里我们是集成后显示的,但如果用http://localhost:3000这种方式查看的话就会出现找不到页的情况,所以用logon参数是用来判断的。
OK,就写这些了,其他的页修改的时候找到对应页,去掉css,用面目全飞脚就可以了。
贴出一段我修改过的带注释的代码
这是对/MDaemon/WorldClient/Templates/Standard下Options.html的修改
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; CHARSET=<$CharSet$>">
<link rel="stylesheet" type="text/css" href="<$THEME$>/<$Style$>.css">
<script type="text/javascript" src="<$THEME$>/globals.js"></script>
<script type="text/javascript">
<$IF CGI:Reload$>
top.frames[0].document.location.reload(true);
<$ENDIF$>
function init()
{
Mesg('<$ERRORMESG,JS$>');
}
</script>
</head>
<body οnlοad="init();">
<p>
<a class="Options" href="<$Link$>&View=Options-Prefs">[$Personalize$]</a>
<br />
[$Customize the appearance and operation of your account.$]
</p><!--个性化设置-->
<p>
<a class="Options" href="<$Link$>&View=Options-Compose">[$Compose$]</a>
<br />
[$Customize the appearance and operation of message composition.$]
</P><!--撰写-->
<!--<$IF MDPRO$>
<$IF CALISENABLED$>
<p>
<a class="Options" href="<$Link$>&View=Options-Calendar">[$Calendar$]</a>
<br />
[$Customize the operation and settings of your calendar.$]
</p>
<$ENDIF$>
<$ENDIF$>--><!--日程-->
<!--
<$IF WEBADMIN$>
<p>
<a class="Options" href="<$Link$>&View=WebAdmin" target="_blank">[$MDaemon Settings$]</a>
<br />
[$Customize your MDaemon mail account settings.$]
</P>
<$ENDIF$>--><!--MDaemon 设置-->
<p>
<a class="Options" href="<$Link$>&View=Options-Folders">[$Folders$]</a>
<br>
[$Create personal folders to store and manage your messages.$]
</p><!--文件夹-->
<!--
<$IF MULTIPOPSERVERENABLED$>
<p>
<a class="Options" href="<$Link$>&View=Options-MultiPOP">[$Mailboxes$]</a>
<br />
[$Add external mailboxes that WorldClient should collect mail from.$]
</p>
<$ENDIF$>--><!--其它pop?-->
<!--
<$IF CANEDITFILTERS$>
<p>
<a class="Options" href="<$Link$>&View=Options-Filters">[$Filters$]</a>
<br />
[$Set rules to distribute your incoming messages to specific folders, and/or prevent unwanted mail.$]
</p>
<$ENDIF$>--><!--邮件过滤-->
<!--
<$IF GroupWare$>
<p>
<a class="Options" href="<$Link$>&View=Groupware">MDaemon GroupWare</a>
<br />
[$Share your Outlook calendars, contacts, and more with other users.$]
</p>
<$ENDIF$>--><!--分组?-->
<!--
<$IF COMAGENT$>
<p>
<a class="Options" href="<$Link$>&View=ComAgent">ComAgent</a>
<br />
[$Monitor your mail and sychronize your address book with ComAgent.$]
</p>
<$ENDIF$>--><!--ComAgent -->
</body>
</html>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/runxi/archive/2004/07/21/47720.aspx