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

SMTP组件的使用方法-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
SMTP组件的使用方法-Delphi资料

Borland的Delphi3提供了FTP、HTML、HTTP、SMTP等14个Internet组件,使得开发Internet应用程序变得轻松有趣。我们利用其中一个名为SMTP Client的ActiveX组件, 可简单的设计一个E-Mail发送程序。

一、用SMTP组件发送E-Mail的步骤

1、连接SMTP服务器:SMTP1.Connect(RemoteHost:string

RemotePort:longint);Remotehost即SMTP服务器。

2、制作邮件头:可用SMTP.DocInput.Headers.Add(Name

Value:string)方法

增加电子邮件的头信息,主要包括有发件人E-mail地址、收件人E-mail地址、所采用的文件格式和字符集、发送软件名称等项目,供SMTP1.SendDoc方法使用。

3、发送邮件:SendDoc(URL:string

Headers:DocHeaders

InputData:VARIANT

InputFile:string

OutputFile:string);

发送时必须保证SMTP1.State(连接状态)为prcConnected,才能正确发送。

二、监控SMTP组件运行时状态的方法

1、连接状态:SMTP组件共有6种有关连接的状态

(1)prcConnecting : 正在连接

(2)prcResolvingHost : 解析主机地址

(3)prcHostResolved : 解析完成

(4)prcConnected : 已经建立连接

(5)prcDisConnecting : 正在撤消连接

(6)prcDisConnected : 已经撤消连接

上述6种状态可在SMTP组件的OnStateChanged事件中监控,用于显示连接进程。

2、发送状态:SMTP组件在发送邮件时也有6种状态

(1)icDocNone : 没有传送数据

(2)icDocBegin : 开始传送(初始化)

(3)icDocHeaders : 传送邮件头信息

(4)icDocData :传送邮件内容

(5)icDocErroe : 传送出错

(6)icDocEnd : 传送结束

上述6种状态可在SMTP的OnDocInput事件中监控,用于显示传送进程。

三、窗体设计

1、设置窗体Form1的Font.name为宋体,Font.Size为12。

2、在窗体Form1上放置SMTP1、Button1、OpenDialog1、Panel1、Edit1、SMTP1、Bevel1、Label1、Memo1等19个组件。布局参见程序运行时界面(图一)。

3、设置Button3.Enabled为False;设置Memo1.lines为空,Memo1.ScrollBars为ssVertical;设置OpenDialog1.Filter为“文本文件|*.TXT|所有文件|*.*”。

四、运行举例

给ty@163.netE-mail:

1、设置我的E-mail地址为cq98@263.net,SMTP服务器为263.net

收件人E-mail地址为ty@163.net,邮件主题为“问候”,在Memo1备注框输入邮件内容。也可打开一个现有的文本文件放入Memo1备注框。

2、按“建立连接”,在提示框出现“已经建立连接”、“发送邮件”按钮变为允许时,按“发送邮件”按钮即可将E-mail发出,发送结束时,提示框将提示“邮件发送完成”。同时,在程序运行过程时,提示框中可不断提示连接或发送的状态。图一为本程序运行时的界面。

3、退出程序应撤消与SMTP服务器的连接。

五、源程序

unit Unit1;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

ComCtrls

ToolWin

OleCtrls

isp3

StdCtrls

Buttons

ExtCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

SMTP1: TSMTP;

Memo1: TMemo;

OpenDialog1: TOpenDialog;

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

Panel4: TPanel;

Panel5: TPanel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Bevel1: TBevel;

Label1: TLabel;

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure SMTP1StateChanged(Sender: TObject; State: Smallint);

procedure Button1Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure SMTP1DocInput(Sender: TObject; const DocInput: DocInput);

procedure SMTP1Error(Sender: TObject; Number: Smallint;

var Description: WideString; Scode: Integer; const Source

HelpFile: WideString; HelpContext: Integer;

var CancelDisplay: WordBool);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

SMTPerror: Boolean;

implementation

{$R *.DFM}

function GetNoParam: Variant; {缺省的参数}

Var V: Variant;

begin

TVarData(V).VType := varError;

TVarData(V).VError := DISP_E_PARAMNOTFOUND;

GetNoParam := V;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if SMTP1.state=prcConnected then

SMTP1.Quit {撤消连接}

else

if SMTP1.State=prcDisConnected then begin

SMTP1.RemoteHost:=edit2.text; {SMTP服务器}

SMTP1.Connect(GetNoParam

GetNoParam); {建立连接}

Application.ProcessMessages;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

SMTPerror:=False;

while SMTP1.Busy do Application.ProcessMessages;

with SMTP1 do begin

DocInput.Headers.Clear; {邮件头信息}

DocInput.Headers.Add('From'

edit1.Text); {发件人地址}

DocInput.Headers.Add('To'

edit3.Text); {收件人地址}

if edit4.Text<>'' then

DocInput.Headers.Add('CC'

edit4.Text); {抄送地址}

DocInput.Headers.Add('Subject'

edit5.Text); {邮件主题}

DocInput.Headers.Add('X-mailer'

'MyMailer [Cao ZuQuan HBZJ]'); {发送软件名称}

DocInput.Headers.Add('Message-Id'

Format('%s %s %s'

[Application.Title

DateTimeToStr(Now)

edit1.Text])); {邮件标识、文件格式和字符集}

DocInput.Headers.Add('Content-Type'

'text/plain; charset="GB2312"');

SendDoc(GetNoParam

DocInput.Headers

Memo1.Text

''

''); {发送邮件}

end;

end;

procedure TForm1.SMTP1StateChanged(Sender: TObject; State: Smallint);

begin

case State of

prcConnecting:

Label1.Caption:='正在连接'+SMTP1.RemoteHost+'...';

prcResolvingHost:

Label1.Caption:='解析服务器地址...';

prcHostResolved:

Label1.Caption:='服务器地址解析完成';

prcConnected:

begin

Label1.Caption:='已经建立连接';

Button2.Caption:='撤消连接';

end;

prcDisconnecting:

Label1.Caption:= '正在撤消连接...';

prcDisconnected:

begin

Label1.Caption:= '已经撤消连接';

Button2.Caption := '建立连接';

end;

end;

Button3.Enabled:= state=prcConnected;

end;

procedure TForm1.SMTP1DocInput(Sender: TObject;

const DocInput: DocInput);

begin

case DocInput.State of

icDocBegin:

Label1.Caption:= '邮件初始化...';

icDocHeaders:

Label1.Caption:= '发送邮件头信息...';

icDocData:

Label1.Caption:= '发送邮件内容...';

icDocEnd:

if SMTPError then

Label1.Caption:= '发送出错!!!'

else

Label1.Caption:= '邮件发送完成!';

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin {打开一个文本文件,将其内容作为邮件正文}

if Opendialog1.Execute then begin

Memo1.Lines.Clear;

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

begin {退出系统}

if SMTP1.state=prcConnected then SMTP1.Quit;

Close;

end;

procedure TForm1.SMTP1Error(Sender: TObject; Number: Smallint;

var Description: WideString; Scode: Integer; const Source

HelpFile: WideString; HelpContext: Integer; var CancelDisplay: WordBool);

begin {当发送出现错误时触发本事件}

SMTPerror:=True;

end;

end.

[开源推荐]TurboGears:一站式的Python开发框架集合 腾讯云公测终究还是来了 BAT云大战将开启? iOS 7将从这三方面影响IT界 超越Google,他企图将整个互联网塞进1台电脑 2013互联网安全大会议题先睹为快之CSA中国理事赵粮 移动建站工具(二):分秒钟DIY一个移动网站 2013上半年中国移动互联网报告,在线完整版 iOS开发者必备:九大设计类工具 已到“迟暮之年”?微软投资者提议两“救世主”外部候选 【SDCC讲师专访】Joseph G. Brown:云带来的软件销售方式变革 用户界面设计攻略:设计师需注意的九大要点 Google Glass的竞争对手来了:看YC演示日的五款新孵化项目! GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构 黑帽大会演讲中国第一人:从攻到防,从白帽黑客到创业者 15个步骤创立技术公司,并收获千万用户(完结) CTO容易犯的三大错误 谷歌艺术计划:互联网能否取代真实的博物馆? Hadoop技术沙龙:Hortonworks技术研发总监展望Hadoop 2.0 Marissa Mayer:雅虎月活跃用户增长了20%达8亿 移动用户3.5亿 气死偷车贼:脑电波防盗技术,让偷车贼无计可施 TIOBE 2013年9月编程语言排行榜:Transact-SQL首次进入前十 前Oracle总裁Charles Phillips:商业软件领域的“乔布斯” 留住你的用户:8款第三方移动推送服务 人气最旺:主流移动应用创建工具大合集(一) 不要强迫用户注册,请让他们先试用产品 Eve:基于Python的REST API框架 想扩展你的数据库吗?那么先了解一下I/O 白帽黑客将现场爆料Android系统及框架漏洞 9月13日:程序员节,一起来过节吧! 欲与Siri、Google Now比高低:微软开始打造个人助理Cortana 【开源专访】禅道创始人王春生:覆盖项目全周期,回归管理的本质 为什么 Rs->GetFieldValue 取两个字段的时候出错,只能一次去一个字段么? 用C#如何实现在form上画一条曲线,然后用鼠标托动曲线上的某一个点,该曲线的弧度根据鼠标的移动而变化 如何选择一行数据,条件是该数据的date类型的列为空(oracle)? 强烈建议!!!! 用过MSComm的朋友看过来。 清详细介绍ActiveX 请教众英雄: 怎么用C#写一个ComboBox Web Control 谢了!to anybody1 中国共享软件注册中心的2002年2月份汇款为什么现在还没到? 请问用DELPHI的ADO挂接的VFP数据库,进行删除只能是加删除标记,如何应DELPHI彻底删? 为什么 Rs->GetFieldValue 取两个字段的时候出错,只能一次去一个字段么? 请问用DELPHI的ADO挂接的VFP数据库,进行删除只能是加删除标记,如何应DELPHI彻底删? 怎样在weblogic5.1下建虚拟主机 ?xml+xsl=fo? 百分求解!!!!!!(给个思路也好呀) 请问哪儿有好一点的免费计数器? to cobi(我是小新),txinfo(冰炎两重天) 两位高的在吗? 如何将mpeg文件中的某一帧保存为BMP文件? asp中加入了一个组件,但是用到一些属性、方法时会出错,而且相当慢,怎么会事 共享软件为什么要收钱? 怎样编程控制Memo控件滚动到最底下? 寻找可以在局域网内代理QQ的软件,谢谢!!!!!! 我下载了一个控件叫XPMenu.pas的菜单资源文件,我不清楚如何使用才能使用这种没有具体图形的原代码? 谁可以提供将autocad2000的.dwg或.dxf格式转换到.mif格式的软件~~~~~~~~~ 请问qq是delphi还是vc做的? 网络协议方面的编程,我该学Visual C++还是Visual C#.net? 如何用LotusScript创建一个表单?(进者有分!!!) exchange的测试问题 请大家帮个忙,到哪里可以找到关于http,FTP协议的资料 请问为什么在Debug编译好的Dll,Release版就会报错? 怎么这个问题没人回答,在线等待,一定给分 懂DLL的同志请看过来! 如何得到Windows中用户设定midi输出设备的序号 请问怎样控制数据窗口某列某中数值的字体颜色,给高分,呵呵,请指教 请问qq是vc还是delphi些的呢? 有没有开发IE插件的SDK? 各位大虾请帮忙,简单的vb循环转C++ 急救:::一个关于网站建设的问题 如何在代理中使用LotusScrip创建表单? to:anybody1 thanks Delphi6.0中怎样使用OpenDialog?(一定给分) 本周五3。15是giko(孤独的老鱼)的生日! 用bcb编写cgi程序 关于权限的问题用SQL语句实现?急急!!! access violation 问题 小弟的登陆程序还有点问题,请各位帮忙解决。 听说能自己给自己加分? ◆◆◆奇怪,关于ZIP 压缩文件??? 怎么在运行时为picutrbox控件内部增加其他控件?还有问题解决了,分怎么给? 如何恢复ASP的组件服务? 又一个C/S方式下的编程问题,不明白呀?为什么呢?怎么做呢? 几个初三化学问题-------关于化合价下列关于化合价的说法中正确的是( )A.液态氧和液态氢的混合物中,氧元素显-2价B.金属显正价,非金属显负价C.一种元素在同一种化合物中,可能有几种化合价D 如何检测碘酸钾与硫酸铜是否反应完全? 一亩大概地产多少土豆? 在两对相对性状的独立遗传实验中,利用AAbb和aaBB做亲本进行杂交,F1自交的F2,F2代中能稳定遗传的个体和重组型个体所占的比例各是多少?A.1/4 和 6/16 B 9/16 和 2/16 C1/8 和 3/8 D1/4 和 10/16 碳酸(H2CO3)能与亚硫酸(H2SO3)反应吗 镜面抛光机械研磨抛光, 高中必修二生物求助2,谢谢两对等位基因Aa,Bb,分别位于不同的同源染色体上,让显性纯合子(AABB)与隐形纯合子(aabb)作为亲本进行杂交得F1,再让F1自交,获得F2.回答下列问题:(4)若F2表现型比例 碳酸和亚硫酸的酸性比较亚硫酸的酸性强还是碳酸的酸性强? 铝合金抛光后提高硬度铝合金压铸件毛坯经机械抛光后如何增加其硬度,使零件间碰撞时不会有出现伤痕?有人说经过一种光亮剂浸泡后用烘箱烘干后可以达到,不知是否可以?光洁度也要保证. 我们吃的马铃薯属于植物的哪个部分 如何提高土豆产量 亚硫酸纳化学式 NH4NO3中各元素的化合价 马铃薯的产量大约是多少每亩?详细实用的种植技术有哪些?最高产的品种有哪些? ,高手来CO(NH2)2尿素电解的化学方程式,在碱性条件下.正负极方程式 22.金属铜能被FeCl3的浓溶液腐蚀,其化学反应是:Cu+2FeCl3=2FeCl2+CuCl2 现将有铜的印刷线路板浸入120mlFeCl3的浓溶液中,有9.6gCu被腐蚀掉.取出印刷线路板,向溶液中加入8.4g铁粉,经充分反应,溶液中还 碘跟红磷还有水反应生成氢碘酸需要思念条件 元素或原子团的化合价如何表示 某工厂用FeCl3溶液腐蚀镀有铜的绝缘板生产印刷电路 发生反应的化学方程式为 2FeCl3+Cu=2FeCl2+CuCl2、实验小组的同学对生产印刷电路板的废液成分进行了如下探究:①取少量废液,低价KSCN溶液显 氢碘酸配制中碘红磷刚加水就浓烟外冲!怎么操作好呀? 原子团中各元素正负化合价的代数和等于什么 制印刷电路时常用氯化铁溶液作为"腐蚀液",发生的反应为2FeCl3+Cu=2FeCl2+CuCl2 .向盛氯化铁溶液的烧杯中同制印刷电路时常用氯化铁溶液作为“腐蚀液”,发生的反应为2FeCl3+Cu=2FeCl2+CuCl2 .向盛氯化 实验室怎么制取氢碘酸 三酸化学抛光、抛光后表面出现麻点是什么原因? 稀释蛋清液、马铃薯匀浆、白梨汁、花生子叶哪些含有蛋白质、还原性糖、淀粉、油脂? 红磷 蒸馏水 碘 制备氢碘酸的详细流程包括反应时间 温度 器材的装置 材料的配比 细节问题最好一一阐述有好的回答我追加100分 6063铝合金抛光后会产生哪些缺陷? 稀释蛋清,马铃薯匀浆和白梨汁中哪种含有蛋白质,糖类和淀粉三种物质?那种物质分别加了双缩尿试剂,本尼迪特试剂后有什么反应 制取氢氟酸,氢碘酸的化学方程式 硝酸铵的化学式中的各元素的化合价是? 碘化铜中铜的化合价的多少? 亚硫酸亚铁的性质 马铃薯不含还原糖的原因? 亚硫酸根的所有性质,和关联的所有方程式 碘酸碘中碘元素化合价是多少?(计算要有过程) 亚硫酸亚铁是什么颜色的是不是绿色阿?溶液当然是绿色的啦. 土豆怎么做好吃 土豆和豆浆可以一起吃吗 亚硫酸亚铁是沉淀吗?我看到一个反应,说是压硫酸钠碰到氯化铁会产生亚硫酸亚铁沉淀, 我很爱吃土豆~不知道吃土豆的好处与坏处~ 白梨汁中含有蛋白质和淀粉吗?稀释蛋白清除含有蛋白质外,还含有葡萄糖和淀粉吗?马铃薯呢? 亚铁离子和亚硫酸根反应吗 土豆吃的是它的什么 氨氮高了如何处理 求亚硫酸根离子,亚硫酸氢根离子,硫离子,硫氢根离子,亚硝酸根的化学式 化学问题NH4NO3中 两个N化合价是相同的吗? 氨氮超标如何处理 磷酸钠 碳酸氢根离子 亚硫酸氢根离子 的写法 请问,求NH4NO3中N的化合价时为什么要拆成两个原子团后才能求?为什么不能写成:2N+4+(-2)×3=0?另外,像这样把化学式拆开后再求元素的化合价还有哪些? 硫酸铜在一定条件下反应是否可生成铜 亚硝酸钠溶液与铁作用时,亚硝酸钠分解成什么?氧化层是氧化铁还是亚铁酸钠?不要笑我! 写出NH4NO3中两个N的化合价分别是多少,并写出计算过程. 亚硫酸具有酸的性质,酸性比碳酸强,下列说法错误的是A相同浓度的亚硫酸溶液的PH比碳酸大B亚硫酸溶液不能使无色酚酞试液变色C亚硫酸溶液能与金属氧化物反应生成盐和水D亚硫酸溶液能与 亚硫酸的化学式是什么 为什么不存在碘化亚铜? 怎样判断硫酸铜与碘酸钾反应完全 亚硫酸亚铁化学式是什么? 初三化学化合价练习 亚硫酸和碳酸谁强? 是要
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘