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

Delphi4.0 开发WEBMAIL程序

HTML文档下载 WORD文档下载 PDF文档下载
Delphi4.0 开发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上调试通过。

John Carmack大神亲操刀,为Oculus开发Netflix应用 React Native实战(二):Android的打包 独立游戏的成功秘诀:好设计才是王道 Swift 2.1的新变化 Apple TV实战:用TVML开发第一款tvOS应用 【SDCC讲师专访】阿里王晶昱:云时代的分布式数据库DRDS 硬件研发、嵌入式技术演进:MDCC IoT峰会日程揭晓 专访百度知道iOS团队负责人孙源:代码强迫症的死实践派 TIOBE 2015年10月编程语言排行榜:Ruby取代Objective-C进前十 【SDCC讲师专访】PingCAP联合创始人兼CEO刘奇:好的产品应开源,不闭门造车 【深入浅出Koa】常用工具分享 帮你降低编程难度 Relay: 全新的React数据获取框架 探索游戏开发面临的技术挑战——MDCC 2015游戏开发专场议程曝光 【SDCC讲师专访】易开发创始人潘俊勇:这些年我遇到的那些坑 【CTO讲堂】OpenStack行业实践和发展趋势探讨 万物互联,移动为先:MDCC 2015移动开发者大会盛大开幕! 【MDCC 2015】微软开发体验与平台事业合作部大中华区DX部门总经理Srikanth Raju:物联之上云+端 英雄会晚宴,Top开发者共聚“华山之巅” 【MDCC 2015】产品与设计专场(上):百度研究院、印象笔记等专家齐聚,以实例探讨如何打造好产品 【MDCC 2015】产品与设计专场(下):网易云音乐、在行、三节课、去哪儿网、野兽骑行大咖的产品之路 友盟:把数据用活 让开发者享受大数据红利 友盟:用活大数据 让精细化运营为移动开发者服务 携手世纪互联 IBM Bluemix云平台落地中国 【MDCC 2015】IoT峰会—硬件开发与技术专场(下):专家齐聚,共同打造联网新时代 【MDCC 2015】虚拟现实专场(下):虚拟现实的“困”与“竞” 【CTO讲堂】面对世界竞争对手,如何拿到Google PDF开源项目PDFium? 提升网站性能开发的10个技巧 SDCC 2015:顶尖技术精英云集 大会日程及首批讲师议题公布 《近匠》专访猿团创始人CEO谢恩明:梦想、未来、改变 《近匠》专访小熊尼奥:从软硬结合到IP合作,AR产品的机遇 W3C启动Web支付标准工作,推进在线结算流程 怎样判断一个控件是否获得焦点. 通过row和col不行,我以前也用过, 用SetSQLSelect更改dw的sql语句后,如果dw没有检索参数时能行,如果dw有检索参数则返回-1,请问有办法吗解决吗? SQL Server中的datetime类型数据是否能比较大小? Update 时出现 ODBC错误文件被另一线程占用,问题出在那里??? 请问U-C矩阵是什么? 庆祝一下 请教程序组加入程序的问题 老是想来灌水,把这点可用分送光得了,省得挂念 IT老虎,与天为敌快进来,谢谢我只有20多分了,你们一人十分吧,我留点好吧? 如何实现打印,尤其是分页打印? paw_001,paw_001 在马? NetGuardian??哪为兄弟有啊,给我一份copy~~~~~~~~~~~~ 关于自增长字段使用的问题,高手请进 这一贴,分就少点了,就这么多啦 有人能告诉我广东省C程序员与JAVA程序员的薪水比较吗?为什么会有这种差距呢 请问用javaApplet如何控制IE界面? 点对点的讨论 水平考试与资格考试及格分别是多少分? 如何再网页中实现打印功能,份也打印。 我发现了一个网站的BUG,我该怎样进去? 到处都是泡泡,俺看的想吐,晚上再来算了。 怪事, 屏幕变黑白 我的问题_6 MYSQL中like的问题 请教打印预览问题 请问,如果我想把,file edit tools window这个主菜单栏动态去掉,怎么做? 如何用程序代码实现在Memo文本编辑框中被选中的文字加下划线。 怎样分析tcp报文(我很急呀) *.idl文件如何使用? 各位大侠,怎么写一个php在线打分的程序阿? 我测试一下 感兴趣的去试试! IE外壳扩展的程序 Delphi 6.0的一个Bug??? 我怎么把字符串放进缓冲里?急急急!!! 恭喜 zhipop 喜得漂亮的可爱的千金 几个小问题想请教大家 如何将浏览器的地址栏里的IE图标换成自己的图标? r俺明天想去给我的宝马生生级,不算显示器,3000元左右,请各位大侠们赐教该什么配置 2000下写的程序,NT 4.0workstation上为什么不能跑? 启用新主页下载数据窗口编辑器 请教Qbasic中的几个问题..... 用BCB如何向Oracle8.0.5中更新BLOB 用ODBC编程时发现错误:nvarchar 类型无数据类型同其绑定,用CString 出错!如何解决? 救命,救命!!!!!!!!!!!! 【 这两天好像来了很多新人嘛!来报个到吧! 】 请教:如将一个 FormView 的 ScrollBar 去掉 在asp中怎么定义可变长的数组? 关于文本框的问题(你能回答吗?) X档案第三季有一集叫《网络情人》,讲的什么内容? 汽油装在矿泉水瓶里,被压,会不会爆炸,或者起火?比如掉在马路上,汽车压过来……会不会爆炸 把一个手机变进矿泉水瓶的魔术我看了一个魔术,那个魔术师将一个手机变进了一个完好的矿泉水瓶里,而且瓶子是完好的,现场n个观众检验过的,所以各位谁知道这么变的请教教我, 娃哈哈都有哪些产品 娃哈哈的各系列产品 最虎药酒配方有哪些,组成成分是什么 变魔术怎么把矿泉水瓶的盖子变到矿泉水瓶里?魔术师把瓶盖变进瓶子里边以后,观众是可以检查的?怎么变的 娃哈哈为什么叫娃哈哈? 泡制营养酒有什么要求?国家什么机构检测药酒成份最权威?包括有毒有害物质,兴奋剂,激素等 今天抽完烟扔到地上烟头立起来是什么兆头? 娃哈哈矿泉水瓶,596ml的,有多高?身边没有尺子, 空的矿泉水瓶有什么用这个星期三是截止日期!各位帅哥美女,做考试卷要用!另:尽量多一点! 抽完烟把烟蒂丢在地上烟头树立起来有什么征兆 矿泉水瓶怎样做娃娃 人为什么不会被大气压压扁如果解释为内外大气压平衡,产生的压力相等而相互抵消的话,那么试想用两块相同的铁板用相同大的力从相反的方向压一个人,难道由于力可以相互抵消,这个人就可 香烟烧到只剩烟头那部分后扔到地下后会继续燃烧吗?就是说抽香烟的时候抽到只剩烟头的部分,就是上面的烟草部分全都抽完了,没有弹烟灰,那扔到地上后会继续燃烧吗? 矿泉水瓶手工制作宠物吸水器懒得去买宠物用的吸水器 请问用矿泉水瓶怎么做 就是水倒进去然后瓶盖朝下 只有小狗去舔的时候才会出水 为什么大气压不会把人压扁?请真正懂的答 不要瞎编的 你有21根烟头,知道3个烟头可以卷一根烟,请问21根烟头你能抽几根烟回答7的是- 回答10的,都错了,给你们个提示答案11根,能回答对,然后说出理由的就给分 矿泉水瓶手工制作动物 为什么人在大气压中不会被压扁,而在在水中会被压扁?人在大气压中不会被压扁,是因为人身体内部也有大气,抵消了,那么在水里,人身体里也有水,为什么不和外面的水压力抵消,而在深的地方 燃烧的烟头碰到水,水平面上得烟纸也会湿,是什么原因. 矿泉水瓶自制沙漏怎么做 为什么有大气压,房子不会被压扁 两个完全相同的矿泉水瓶,一个装满沙,另一个装满水,放在同一斜面上滑下,那个瓶 幼儿园自制玩具有哪些在分散活动时玩的,如踩尾巴、跳绳等.是要有自制体育玩具的分散活动.不需要玩法,提供的游戏要多点!谢谢O(∩_∩)~ 大气压那么大为什么我没被压扁?平时我用笔刺自己一下!我计算过了.压强顶多3000PA我就疼得要死大气压有10的5次方PA为什么我都不觉得疼?难道空气的压力和用笔压不同吗? 两个完全相同的矿泉水瓶,一个装满沙,另一个装满水,放在同一斜面上滑下,那个瓶子滚 物理-为什么水放在矿泉水瓶里久了,瓶子会挤压变形? 关于魔术:矿泉水瓶盖进矿泉水瓶,我想知道如何做到?不方便在这透露的话给我留言,如果有猜想的话也可以发表下.另外还有手机进矿泉水瓶也感到好奇,有达人可指教下如何做到吗? 两个相同的矿泉水瓶,一个全装沙,一个全装水,从斜面滑,那个快? 什么样的塑料瓶可以装热水 一个空矿泉水瓶在瓶底钻个小洞,然后装上适量的水拧紧瓶盖,为什么不会漏水?为什么拧紧瓶盖不会漏水,但是打开盖子却会漏水? 两个完全相同的矿泉水瓶,一个装沙,一个装水,放在同一斜面上滑下,哪个瓶子滚得比较快 为什么往塑料瓶内倒热水会变形? 为何将装有适量水的矿泉水瓶打开瓶盖倒插在水槽中,水不下落?而在空中打开瓶盖,为何水下落? 木头放在水里为什么不会沉下去呢? 为何塑料瓶中装热水,塑料瓶会收缩不是热胀冷缩吗 往空矿泉水瓶中加入热水,摇晃并盖紧瓶盖,过一会儿瓶子慢慢向内凹陷,这说明什么? 什么东西放在水里会沉下去 为什么放热水的塑料瓶会变憋 向矿泉水瓶倒热水后迅速倒出并改紧盖子,过一会瓶变扁了, 该怎么回答,孩子问:“xx为什么不会沉下水?”孩子问我:“木头,塑料,为什么不会下沉,纸张开始浮着,后来为什么下沉?空饭碗浮在水面,装满水为什么会下沉?” 我物理超差,不知怎么回答,孩 向塑料瓶内到热水,为什么瓶子会缩小?不是应该热胀冷缩吗 为什么把热水倒进瓶子又倒出,然后把盖子盖住,瓶子会慢慢往内缩,为什么?请给我解释关于大气压的,不要其他的条件的回答 ~三楼的,如果再没有好的答案,就是你了~ 为什么水里放食盐,鸡蛋不会沉下去? 矿泉水瓶含有致癌物质有人说矿泉水瓶是一次性的,再次利用会产生致癌物质,真的有这回事吗? 刘谦矿泉水瓶倒立水不流出来的魔术怎么变的?要详细的教我 追加50分 教育我不要看魔术揭秘的滚一边去没我要的答案额 他是让人从一箱密封的矿泉水中随意抽一瓶的 所以不存在道具 为什么挤矿泉水瓶,矿泉水瓶中的水会上升 有人回答 体积不变的情况下,底面积被挤小了,高度就增大 水面上我想问为什么底面积被挤小,你挤矿泉水瓶,他横向减小,但是纵向增加,好比一个圆盒 手机会释放致癌物质吗 为什么矿泉水瓶倒扣在水里,水进不去? 天热 喝矿泉水时想到用矿泉水瓶做船 想请教捆扎瓶子的方法 最好有图纸 谢谢! 乐扣乐扣塑料杯有毒吗 为什么这么冷的天气装在矿泉水瓶里的水不结冰我儿子在夏天里用矿泉水瓶装了一瓶子水,放在了院子里,现在我们河北都零下十多度了,可是它却没有结冰,我又作了实验,我找了个矿泉水瓶装 我买了一瓶矿泉水,喝完之后,把热水倒进矿泉水瓶,为什么瓶子会凹进去的?为什么瓶子不会膨胀?我是这样理解的:加了热水之后(没装满瓶子),拧紧瓶盖.瓶内的压强应该是增大啊?那么,大于 乐扣杯子用久了会不会有毒?以前中学化学老师说过的.有些塑料是有毒的.比如 聚苯乙烯、聚氯乙烯.而 聚乙烯 是 可以用来做食品袋的.但是遇到高温还是会释放毒性的.原谅初中老师就讲过这 往矿泉水瓶里打气,它能承受多大压强才会爆? 怎么让矿泉水瓶盖进矿泉水瓶?还有手机进矿泉水瓶,有达人可指教下如何做到吗? 饮料瓶,比如可口可乐还有矿泉水瓶,这些塑料瓶子可再生吗? 汽油放到矿泉水瓶强烈震动会不会爆炸?起摩托车总是不看油,中途没有油而推着摩托车满大街跑.所以我想把汽油放到瓶子里(震动太厉害,不能使用玻璃瓶)带上,防止没油.有听说塑料瓶里装 把手机放到矿泉水瓶的魔术怎么变的? 娃哈哈刚去娃哈哈做客户经理待遇怎样?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn