说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi4开发WEBMAIL程序

HTML文档下载 WORD文档下载 PDF文档下载
Delphi4开发WEBMAIL程序

通常,实现WEBMAIL采用mailto.exe的CGI、在HTML文件中写入“< form action="mailto:电子邮箱地址" method=post >”语句或者调用WINDOWS API函数。采用WINDOWS API 和在HTML文件中写入“< form action="mailto:电子邮箱地址" method=post >”语句都要求用户的浏览器装入EXCHANGE、OUTLOOKEXPRESS、或OUTLOOK等软件,而且还有一些浏览器不支持MAILTO语句。而采用CGI的形式实现WEBMAIL对用户的浏览器没有要求,但效率不高。CGI技术正在逐渐被ISAPI/NSAPI技术所取代。本文就来讨论一下采用ISAPI技术实现WEBMAIL。

使用Delphi 4开发Web Server程序是非常简单的,Delphi 4中提供了大量的元件和对象,支持Web Server程序的开发。 下面通过一个例子来介绍如何利用DELPHI开发一个响应用户输入的ISAPI的WEBMAIL程序。只有在发送服务器上注册的用户才能通过在浏览器发送邮件。为了简单,程序没有对传送的数据提供保密。

首先,在WEB服务器端安装数据库引擎dbe

并设置好数据库别名:yh

指向一个包含用户名和用户密码的数据库文件user.db。接着建立两个HTML文件,名字分别为:dl.html

qd.html,放在WEB服务器的缺省目录下(如:C:\INETPUB\WWWROOT)。

dl.html的内容如下:

< html >

< head >< title > 发送邮件系统< /title >< /head >

< body >

< h1 >发送邮件系统< /h1 >

< p > 请输入您的用户名及密码。< /p >

< form method=”post” action="/scripts/xsmd" >

< p >用户名:< input type="text" length=10

name="username" >

密码:< input type="password"

length=10 name="password" >< /p >

< p >< input type="submit" value="确定" >

< input type="reset" value="清除" >< /p >

< /form >

< /body >

< /html >

qd.html文件内容如下:

< html >< head >< title >填表< /title >< /head >

< body >

< form method=”post” action="feedback" >

< p >请填入接收邮件地址:toaddress:

< input type=”text” length=20

name=”toaddress” >< /p >

< p >请填入主题。< input type="text"

length=20 name="subject" >< /p >

< p >内容:< /p >

< p >< input type=“textarea”length=40

width=40 name=”body” >< /p >

< p >< input type="submit" value="确定" >

< input type="reset" value="清除" >< /p >

< /form >

< /body >

< /html >

在DELPHI中新建一个基于ISAPI的WEB SERVER APPLICATION,手动增加nmsmtp1

query1

pageproducer1。

其中:pageproducer1的property: htmlfile:c:\inetpub\www.root\qd.html。nmsmtp1的 property:host(发送邮件服务器的地址。)在这里为smtp.netease.com.。port:25。 全局变量为: sername:string;flag:boolean;

增加一个路径为/feedback的动作项,其代码如下:

procedure TWebModule1.WebModule1WebActionItem1

Action(Sender: TObject;

Request: TWebRequest; Response:

TWebResponse; var Handled: Boolean);

Var Count:integer;

S:string;

Begin

Query1.close;

Query1.sql.clear;

S:=’select count(username) from

user.db where username=”’;

S:=s+request.contentfields.values[‘username’]+’”’;

S:=s+’ and password=”’;

S:=s+request.contentfields.values[‘psword’]+’”’;

Query1.sql.add(S);

Query1.open;

If query1.count=0

then response.content:=’< html >< head >< title >

< /title >< body >用户名、密码不正确,请重新输入

< /body >< /html >’

Else

Username:=request.contentfields.values[‘username’];

Response.content:=pageproducer1.content;

End;

再增加一个路径为/sendmail 的动作项,

它的程序代码如下:

procedure TWebModule1.WebModule1Web

ActionItem2Action(Sender: TObject;

Request: TWebRequest; Response:

TWebResponse; var Handled: Boolean);

Var body:string;

Begin

Flag:=true;

body:=request.contentfields.values[‘body’];

Pageproducer1.htmldoc.clear;

Pageproducer1.htmldoc.add(‘< html >< body >’);

Nmsmtp1.postmessage.clear;

Nmsmtp1.postmessage.fromaddress:=username+

’@netease.com’;

Nmsmtp1.postmessage.from:=username;

Nmsmtp1.postmessage.body.add(body);

Nmsmtp1.postmessage.toaddress.add

(request.contentfields.values[‘toaddress’]);

Nmsmtp1.postmessage.subject:=

request.contentfields.values[‘subject’];

Nmsmtp1.connect;

If flag=true then begin Nmsmtp1.sendmail;

nmsmtp1.disconntent;end

pageproducer1.htmldoc.add

(‘< /body >< /html >’);

response.content:=pageproducer1.content;

end;

增加nmsmtp1的事件如下:

procedure TWebModule1.NMSMTP1Connect(Sender: TObject);

begin

pageproducer1.htmldoc.add

('< p >已经和发送邮件服务器连接< /p >');

end;

procedure TWebModule1.NMSMTP1Connection

Failed(Sender: TObject);

begin

flag:=false;

pageproducer1.htmldoc.add

('< p >连接失败< /P >');

end;

procedure TWebModule1.NMSMTP1ConnectionRequired

(var Handled: Boolean);

begin

pageproducer1.htmldoc.add('< p >要求进行连接< /p >');

end;

procedure TWebModule1.NMSMTP1Failure(Sender: TObject);

begin

pageproducer1.htmldoc.add('< p >发送邮件失败< /p >');

flag:=false;

end;

procedure TWebModule1.NMSMTP1Header

Incomplete(var handled: Boolean;

hiType: Integer);

begin

pageproducer1.htmldoc.add('< p >head不完整< /p >');

flag:=false;

end;

procedure TWebModule1.NMSMTP1InvalidHost

(var Handled: Boolean);

begin

pageproducer1.htmldoc.add('< p >

发送邮件服务器地址无效< /p >');

flag:=false;

end;

procedure TWebModule1.NMSMTP1RecipientNot

Found(Recipient: String);

begin

pageproducer1.htmldoc.add

('< p >接受邮件地址不正确< /p >');

flag:=false;

end;

procedure TWebModule1.NMSMTP1Success(

Sender: TObject);

begin

pageproducer1.htmldoc.add('< p >

成功发送邮件< /p >');

end; 

将project存为sendmail.dpr,编译后放到WEB服务器的可执行文件路径下(如:c:\intpub\scripts)

即可响应HTML文件dl.htm的用户输入,并且如果用户的用户名及密码正确则可进入发送邮件的页面,用户填写接受邮件地址及主题、内容后即可发送邮件。此程序在NT SERVER上调试通过。

走进VB6啃一块骨头 做成一个时间限制的测试版 -VB资料 PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 HashSet的equals和hashCode重写问题 PendingIntent实现原理和代码 IntentService实现原理及内部代码 AsyncTask实现原理和内部代码 Neither user nor current process错误 ListView的右边滚动滑块启用方法 Live Wallpaper动态壁纸开发 控制软键盘显示和隐藏 设置Activity大小不再全屏原理 Android面试题,看看你基础如何? Android Canvas绘图抗锯齿解决方法 Android xliff和字符串资源 android.hardware.USB类介绍 Android开发经验谈之应用间数据共享 android_asset这个URL详细使用方法 Android 2.3系统自带高清UI图标下载 设置ScrollView滚动条的颜色 WakeLock使用方法示例代码 Concurrent并发库常见问题总结 Android数据库SQLite性能优化技巧 Android开发之Java设计模式基础篇 Android开发之Java设计模式入门篇 Android开发之Java设计模式 Android开发之Java并发包集合类性能分析 Android开发之Java集合类性能分析 Android开发之Java虚拟机原理和内存分配 Android开发之Java基础系列教程目录 如何得到文件建立和修改的时间呢? 急急急:在线等待。COM的接口中的方法中参数为自定义类指针,返回一个自定义类指针,应该怎样实现? 怎样对double类型的数据定制小数位 VC处理ADO时的怪问题,高分救助----在线等!!! 为什么mysql的longblob类型数据上传超过1M就不行了? VB如何作中文输入软键盘,高分回报? win98自动启动问题 为什么mov eax, [400000h] 和mov eax 400000h汇编结果一样? 刚才的没解决 找工作, 上海。 请帮忙啊 关于在delphi中Dll的创建和调用,象登陆界面一类,dll中有窗体,求例子。 哪家网上书店信誉高,C++ builder书质量高? 关于rs.MovePrevious 100分问题:如何在sdi的view的(0,0,NULL,20)区域固定显示一定内容 VB中使用ADO连接远程数据库时的事务处理问题 在weblogic中,这个错误是怎么回事?(在线等待) 怎么用SOCKET传送一个自定义类型的数据 szbug大哥请进来拿分 幸福女人的小小要求(zt) 各位好,请问一个问题:存储过程的作用是什么,能不能举例说明一下,看了半天书,也没能明白,多谢了! 我想用循环来实现这样的语句,怎么写呢? 请问xml元素内容部分的html代码如何处理 怎样定义rect数组? 一道考试题目:考考你们自己的C++水平。 怎样用代码遍历DBGrid中的记录?急!在线等待! 为什么mov eax, [0x400000h]和mov eax 400000h汇编结果一样? 网络报表最好的解决方法是什么 高分求购web 打印控件?还有一个远程数据库,客户端打印问题帮忙解决一下 哪位高手能给一个简单的TOOLBAR控件应用的原代码?(非常需要) 哪些有钱途?哪些有前途? 讨论:MSE(软件工程)对中国目前的开发现状真的有帮助吗?来者有分 ACCESS查询语句中的DATEPART函数为什么不能执行??? php为什么安上后不能用 在VS.Net中如何使注释生成已编译的HTML帮助文件? 我想更改Win2000的开机画面,请高手指点 ADO连接数据库时的事务处理问提 对于动态生成的控件,如何确定它的名字? vb 中使用select 的问题 想把post的变量遍历,怎样实现 小问题 关于参数 如何通过一个计算机名来查出它在局域网中的IP !!!!!~~~ 急,哪里可以下载IeWebControl? 有没有方法通过分布式连接直接从sql server写数据到oracle数据库。 郁闷问题:有谁知道Textbox在运行时如果没有任何输入,它是否空值? 如何用vb做一个启动程序(在windows启动运行) 请问,怎样将一个已分好区的电子盘格式化成ext2格式??? 请教web services问题 高分求购H261解码算法 子类中怎么用基类中的一个属性? 请问有没有JB7的中文教程,高分相求!(400分) 黄奕产后身材臃肿如大妈李菲儿黑白梦幻大片颠覆造型七型男拍别样写真 林峰成兔男郎吴尊秀广州万人比基尼 水蛇曼腰波涛胸涌游客戴娇倩《连城》多款造型华丽刚柔并济《城市猎人》朴敏英最新缤纷彩装写真59岁姜黎黎23岁漂亮女儿生活近照曝玄彬浪漫约会广州粉丝,全程微笑显亲和赵本山小女儿甜美私照曝光 揭秘奢华豪素颜女神王丽坤身材衣品鉴定 网友:不盘点各大车展车模造型 挤深沟超短裙整邓雯心三栖发展自爆:范冰冰是学习榜样彭于晏刘诗诗半裸玩湿吻 盘点女星喷鼻苍井空自爆是处女 曝光娱乐圈自称仍是王菲罕见出道旧照被早年搭档曝光(图)盘点曾让赵薇被封票房毒药的十部影片《盛夏晚晴天》热播 杨幂刘恺威服装大《中国合伙人》5月18日全国公映 邓电影《倾城》5月10号上映 黄觉与磐《疯狂原始人》经典画面大合辑高群书评"值得看五遍&qu中国临近空间可操纵浮空器研究走在世界詹皇49分平季后赛生涯纪录 超韦德成合照的正确方式长沙雨花区环境污染隐患排查整治取得阶“中研院”人员反服贸被蓝委批应撤销 绿质疑蓝修正“选罢法“应对“割阑尾“民进党新北市议员初选意外落马 李婉钰民进党初选民调将举行 顾立雄姚文智许国际海事卫星组织将免费提供民航客机追北京警方150辆武装巡逻车投入运行我国试点水生态文明城市建设 探索保障港媒:台湾都不可能接受体制外改革中国首个海上北斗增强系统通过验收 精前篮球国手发文质疑医院不作为致其兄死沪地铁日均查60起逃票 150余人今日看点排水设施标准“1年一遇”系误读小贩为逮猫卖钱发明神器:遥控小鸟诱猫深圳市供电局抢修队伍在清平高速神龙收朱炯力挺米西出战世界杯:他甚至是贵州传广州“史上最严”公积金新政5月中旬
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘