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

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.

在发布站点前,Web开发者需要关注哪些技术细节? TOCC、中航信、高德、北斗平台重磅专家登场 邀您共享ITS技术盛宴 腾讯大数据之TDW计算引擎解析——Shuffle AMD APU14 BEIJING技术创新大会精彩看点 这是云整合时代开始的节奏吗?Rackspace考虑退出 一周热点:如何使用15美元每月的机器实现百万文档检索 黑客获取数据信息的目的和进攻手段及应对之策 Surface Pro 3遭大曝光:799$起、四色可选、12寸屏幕 当软件遇上设计,浅谈敏捷UX VS.精益UX DIY“物联网”——自己动手处理传感器数据 AMD成首家X86+ARM双架构计算 欲寻新蓝海 锤子手机发布:Smartisan T1与其背后的开发团队 第六届中国云计算大会在北京隆重举行 替代笔记本的Surface Pro 3:800g、9.1mm,极致轻薄 PWorld2014:畅谈企业软件向“大平台”+“微应用”变革 微软公司全球资深副总裁张亚勤:云计算引领互联网物理化 亚马逊网络服务全球市场副总裁Ariel Kelman:亚马逊AWS云服务推动创新 终超苹果,谷歌成全球最有价值品牌 高通业务拓展总监沈周全:以软件为基础建立差异化优势 设计你所需要的,而不是你想要的 疯狂谷歌建广告天网:电冰箱、汽车仪表盘、恒温器、眼镜和手表 开发者眼中的编程语言…… 寻下一突破口?黑莓推Project Ion项目,正式进军物联网 无人驾驶汽车真的要来了:飞思卡尔研制视觉芯片 支持物联网开发! Qt发布5.3版与嵌入式企业版 5月23日:Java已经19岁啦! Google发布Dart1.4版本,新增Observatory工具 《近匠》Mixtile:跑在盒子中的嵌入式平台 从研发、平台化到营销:移动时代,汽车厂商如何升级? CTO俱乐部“云计算创新与实践”沙龙:云计算的发展趋势与那些“坑” 一周消息树:大型网站系统与Java中间件 IIS如何控制目录访问权限? asp.net 我不懂的问题,不是很难啊。 有关mysql出错的问题?? 牛人们,帮我看看~~~~~~ 调试INTERDEV中的PROJECT? 请问 GetCellDigital返回值有误 目录树记忆属性实现的讨论 关于用户自定义类的问题 自制控件问题 静态链接库中的资源 Xml的查询定位问题? 小高求助! 关于JAVA文件执行时出现的错误 如何在Datagrid中取得当前记录的某字段值? 如何取得下拉菜单项? 目录树记忆属性实现的讨论 我想去中国网通申请域名,他们是不是很吊,有没人用过啊 Help 删除一条记录?? 在研究软件加密 “咱们把最好的粮食给城里人吃,又进城帮助他们盖起了高楼大厦,他们为什么还瞧不起我们呢?” 老板今天叫我签合同 有关于TImage的图像显示速度 怎样让 Title 的显示时间延长????????? !!!!!!!!!格式化数据列 怎么这么慢啊 请问:如何在打印之前设定该次打印纸张的大小(很急,老板催货了,帮忙顶一下,谢谢)? 有什么办法可以把class文件反编译回java文件? 如何写到文件? 自己写一个函数,把2,3,4加到1,2,3中去,不重复 Netscape打印中文网页为什么不成功? 英文XP中装了东亚语言包,能显示中文了,如何输入汉字呢。。。。 接到一个电话 哪位大哥大姐教教我啊? Dll如何同控制台程序通信 RedHat Linux7.2下如何挂上RealTek8139网卡驱动????高分相送哦!在线等待!!! TreeView问题 求register_globals = On和register_globals = Off的不同用法(原代码) 斑竹,我是因为升级才散分的,有个穿红裤衩的支持俺了…… 一个新手的加急求救!谁先回答,就先给谁份,希望大家说的详细点! 写xml文件的不完整的问题 关于esqlc的unload 的问题。 关于方法覆盖,在线等候 一个实际开发中经常令人头痛的问题 在线,急,谁有3D MAX的下载地址?高分! 推荐IT公司调查 监测表记录字段变化情况 如何能够得知table中的字段是什么类形?(如字符,数字,浮点等) SUN认证是不是“纯”English的? 在windows 2000下,如何在perl脚本中,执行另外一个perl脚本文件?? 现在我们有3、4二氯硝基苯这种材料,请问能生产出几种产品,需要和哪些材料反应呢? 防夫是什么意思 求用马哲分析时事的论文 在一个密闭容器内,植物进行光合作用之后生成了氧气消耗了二氧化碳能否再利用生成的氧气进行有氧呼吸如果是不就意味着循环利用了吗,那样的话植物能存活多久,回答好的重重有赏,哈哈 宜夫是什么意思 第二题,我查了百度的一些答案,看不懂. 以“夫”和“泣”为例,分别探索它们的意义 依据浙江省暑假作业语文P3参考回答 夫起大呼中夫是什么意思 关于理论和时间辩证关系运用理论和实践的辩证关系原理说明科学发展观与我国全面建设小康社会的关系论述题:要求标准答案或者完整的参考答案! 汉字与理性“夫”的意义 较夫是什么意思 这是一道马哲题目,关于时间的性质?利用一台粒子加速器,让两束原子在一个圆环轨道上做高速运动,发现这些原子自身的时间确实比外界时间慢了.该实验证明了作为物质运动存在形式的时间 磁铁为什么会将电池的电力吸走?是因为什么原因会造成这种现象? 与夫为纲是什么意思? 要考马哲啦,请知道的同志回答一下:如何理解时间是人的发展的空间?大约200字. 动物避暑 以下关于会议记录与会议纪要说法正确的是A.会议记录是会议全过程的实录,发言的内容依照自然顺序展开,一般不作省略者概括处理B.会议纪要必须体现出指要性,对会议的内容有说该概括C.在 电表怎么看 红色 网络类型里的“外A”“内C”什么意思? .在下列关于会议纪要特点的说法中,正确的有( A )A.纪要的性质取决于会议的内容性质与印发会议纪要的目的要求B.会议纪要有交流会议信息、介绍经验的作用,但没有约束执行的效用C.撰 倒着读和顺着读意思一样的词语,写3个 C/C++ class MyString{private:char *str_;char *MemAlloc(char *str);public:MyString(char *str="");};char* MyString::MemAlloc(char* str){char* tmp = new char[strlen(str)+1];memset(tmp,0,strlen(str)+1);strcpy(tmp,str);return tmp;}MyString::Mystring(char 多项选择:关于会议记录与会议纪要说法正确?以下关于会议记录与会议纪要说法正确的是?( )A.会议记录是会议全过程的实录,发言的内容按照自然顺序展开,一般不作省略或者概括处理B.会 一个词语正着读,倒着读,意思一样,有哪些? 产品安全类别是c类什么意思 通过肺部的气交换由暗红的什么血变成鲜红的什么? 正着读和倒着读意思一样的词语比如合适-适合 妊娠C类什么意思 监控电源正极负极怎么接 带8个监控头子 硫酸铜精粉的成分是什么?其中硫酸铜的质量分数.想做实验. 贵夫什么意思 监控摄像机为什么只接一根正极电源就能工作?12V直流电只接上正极就能工作,负极不接都没事,倒过来接就短路,工作不正常了 想入手一只水族箱,是森森水族箱好还是佳宝?近日箱入手一只水族箱,但是不知道是森森水族箱好还是佳宝好,或者别的什么牌子!请各位大侠赐教! 家夫什么意思? 监控电源上那个正极负极可以随便接吗?正负极都有三个接口,带8个头子应该接哪个,12v15a的电源 森森302过滤桶 声音大么 这个桶怎么样 夫教什么意思 保温杯里面那层银色是什么材料 《生命生命》课堂观察记录“教什么” 今夫不受之天的夫的意思 转椅 转第几声 勉强 强第几声 两块同型号手机电池,铜片负极对负极分出一根线 正极对正极分出一根 然后焊接USB口 插上数据线可以充电吗已经搞好了现在正在充电,正负极 分出来一根线是USB口,一个是万能改装充电, 热的快有220V 110V的区别吗 通常用的220V的热得快可以直接用在110V电压上吗?安全吗 110V可以直接用在210V 以下正确描述面向对象特点的选项有()a封庄 b继承c多态 USB里的红 绿 黑 白线接成1个正极和1个负极的该怎么接? 初中数学统计请帮我解释一下第3问怎么回事.谢谢 (多选题)在C#程序中,有如下代码,则下面选项中说法正确是()public class A{}public class B:A{}A a=new A();B b=new B();A.表达式b as A的值为nullB.表达式a as B的值为nullC.表达式b is A的值为trueD.表达式a is B的 这个usb线哪个是电量正极 哪个是负极 子夫是什么意思 "强人所难"中,"强"读几声呢? 3D眼镜中,红蓝和红绿有什么区别?买3D眼镜的时候会发现有红蓝 红绿两种,有什么区别吗? 看夫相子的“相”字是什么意思 如何理解时间和空间的有限性和无限性 和红蓝、红绿眼镜有区别吗? 现在家用电器越来越多,冬天里开的电器更多了,我怕家电短路引起火灾,那家财险能负责赔吗? 命限要早夫晚子? 强人所难中的强读第几声?强占的强,和记载的载呢? 3,4-二氯硝基苯除了可以生成苯胺,还可以生成什么? 祭夫益子什么意思 怎样理解时间和空间的有限性和无线性的辩证关系 这是关于马哲的问题 日本海上自卫队一军官因非法使用兴奋剂委内瑞拉总统称查韦斯音容出现在委地铁美国最新隐身驱逐舰下水 明年秋季开始消息人士称叙化武生产设备销毁工作如期纽约提高香烟禁售最低年龄 未满21不研究证明蝙蝠系非典传播源 病毒可由动小狗被饿三周吃伞充饥 其主人不愿救治男子扮高富帅专门诈骗按摩女 谎称投资巴西里约热内卢社会游民多 5000余媒体曝美全球监听地图 澳大利亚是美监近3成日本大学毕业生3年内离职 疑被美国艺术家创造“糖果肖像”庆祝万圣节法国一名抢劫犯曾为iPod及8欧元抢韩媒:中国学生“弃日择韩” 赴韩留学俄罗斯一科技园项目涉嫌违法 或致数百新10英镑钞票印简 奥斯丁头像 被批伊朗或取消向巴基斯坦供应天然气巨额合乌克兰加入欧盟协定签署期或推迟到20女子坚持每天喝3升水 4周后外貌似年西班牙首相关注美监听行动 称将听取情法国将实施冬季禁逐令 拖欠房租者也可元首被美监视拉美大国震怒全新爱丽舍成都车展重磅登场新X1探索版正式发布轨交11号线交大站 可漫游“钱学森六一健康全新国产RAV4上市战力大涨留学生受骗挨宰的背后群众才会真给你提意见编者按沪滇志愿服务接力“女村官”的最美乡村梦一幅徐徐展开的现代宜居画申城将推进“重特大病保障机制”养 女六一博士信箱留学申请季,为您量身定制留美方案两成韩国青年可能终身不婚自由贸易区设立,写字楼迎来价值井喷欣赏“歇后语”新帕杰罗·劲畅20.88万元起售“僵尸帮帮车”挪窝
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘