WebMail是指在网页中实现邮件的发送
使用Delphi开发Web Server程序是非常简单的
Delphi中提供了大量的元件和对象
下面通过一个例子来介绍如何利用Delphi开发一个响应用户输入的ISAPI的WebMail程序
为了简单
程序没有对传送的数据提供保密
首先在Web服务器端安装数据库引擎dbe并设置好数据库别名yh指向一个包含用户名和用户密码的数据库文件userdb接着建立两个HTML文件名字分别为dlhtmlqdhtml放在Web服务器的缺省目录下(如c\inetpub\wwwroot)
dlhtml的内容如下
<html>
<head><title>发送邮件系统</title></head>
<body>
<h>发送邮件系统</h>
<p>请输入您的用户名及密码</p>
<form method=postaction=/scripts/SendMail>
<p>用户名<input type=text length= name=username>
密码< input type=password length= name=password ></p>
<p><input type=submit value=确定>
<input type=reset value=清除></p>
</form>
</body>
</html>
qdhtml文件内容如下
<html><head><title>填表</title></head>
<body>
<form method=postaction=feedback>
<p>请填入接收邮件地址:toaddress:
<input type=textlength= name=toaddress></p>
<p>请填入主题<input type=text length= name=subject></p>
<p>内容</p>
<p><input type=textarealength= width= name=body></p>
<p><input type=submit value=确定>
<input type=reset value=清除></p>
</form >
</body >
</html >
在Delphi中新建一个基于ISAPI的Web Server Application手动增加nmsmtpquerypageproducer其中pageproducer的htmlfile属性为c:\inetpub\wwwroot\qdhtmlnmsmtp的host(发送邮件服务器的地址)在这里为smtpneteasecomport:全局变量为sername:string;flag:boolean
增加一个路径为feedback的动作项其代码如下
Var
Count:integer;
S:string;
Begin
Queryclose;
Querysqlclear;
S:=select count(username) from userdbswheresusername=;
S:=s+requestcontentfieldsvalues[username]+;
S:=s+and password=;
S:=s+requestcontentfieldsvalues[psword]+;
Querysqladd(S);
Queryopen;
If querycount= then responsecontent:=
<html><head><title>
</title>
<body>用户名密码不正确请重新输入</body>
</html>
Else
Username:=requestcontentfieldsvalues[username];
Responsecontent:=pageproducercontent;
End;
再增加一个路径为Sendmail的动作项它的程序代码如下
Var body:string;
Begin
Flag:=true;
body:=requestcontentfieldsvalues[body];
Pageproducerhtmldocclear;
Pageproducerhtmldocadd(< html >< body >);
Nmsmtppostmessageclear;
Nmsmtppostmessagefromaddress:=username+@neteasecom;
Nmsmtppostmessagefrom:=username;
Nmsmtppostmessagebodyadd(body);
Nmsmtppostmessagetoaddressadd(requestcontentfieldsvalues[toaddress]);
Nmsmtppostmessagesubject:=requestcontentfieldsvalues[subject]
Nmsmtpconnect;
If flag=true then
begin
Nmsmtpsendmail;
nmsmtpdisconntent;
end
pageproducerhtmldocadd(</body></html>);
responsecontent:=pageproducercontent;
end;
增加nmsmtp的OnConnect事件添加如下代码
pageproducerhtmldocadd(<p>已经和发送邮件服务器连接</p>):
在NMSMTP的Connection事件添加如下代码
flag:=false;
pageproducerhtmldocadd(<p>连接失败</P>);
将project存为sendmaildpr编译后放到Web服务器的可执行文件路径下(如c:\intpub\scripts)即可响应HTML文件dlhtm的用户输入并且如果用户的用户名及密码正确则可进入发送邮件的页面用户填写接受邮件地址及主题内容后即可发送邮件此程序在NT Server上调试通过