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

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.

在VB中获取可执行文件及Windows 95快捷方式的图标 在VB中进行各种图形切换的方法 在VB中制作可滚动的图像显示 在图片上平滑移动文字 -VB资料 VB怎样使程序的标题条闪烁? VB制作图像的Mask图 CWinInetConnection-一个封装了WinInet API函数的类 -VB资料 MODEM通讯意外处理-VB资料 MsComm 文字传输-VB资料 PING一个IP地址(向它发送一个数据包并等待回应) -VB资料 SMTP协议简介 (Simple Mail Transfer Protocol) -VB资料 VB5.0 中远程数据库的访问 VB下如何编写CRC校验程序 Visual Basic 6中发送邮件的新方法 Visual Basic通信程序设计 Whois 示例程序-VB资料 Winsock Terminal示例程序 -VB资料 WinSock断开导致客户端问题-VB资料 把Outlook信箱中的附件另存为 -VB资料 保证连网计算机时间同步-VB资料 编写网络寻呼机 -VB资料 编制自已的电话录音小程序-VB资料 程序中如何启动默认的拨号连接-VB资料 打开浏览器并进入指定网址-VB资料 得到用户的IP地址 -VB资料 电话拨号 -VB资料 电子邮件的标准格式 (RFC 822)-VB资料 断开拨号网络的连接-VB资料 断开与 Internet 的连接 -VB资料 发送电子邮件附件-VB资料 VB获得用户网络登录名 《Applied Cryptography》,这是本什么书? 一个12位的整型,用unsigned long可以容纳吗? Perl以后会变成什么样呢? 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 下面添加用户的代码能运行吗,我怎么运行不起来,50feng VC文本编辑器没有参数提示 在Delphi中如何使图像淡入淡出? 猜猜中国今天输几个,本人大胆预测10-0 为什么我这里总是405错误呀?Method Not Allowed……The requested method POST is not allowed ADO技术问题! HOOK还是不行! 在ocx中如何使用一个ActiveX,不算使用IMPORT,还有没有别的方法呢?(大送100分) API中的SETTEXTCOLOR函数! 部署实体bean的问题(jbuilder6+weblogic6)??? 怎么样自动增加一列在select UserID,AreaCode from table 。在先等候,先答来的100 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 调查:各位都用哪里的主页空间? 猜猜中国今天输几个,本人大胆预测10-0 我不喜欢南美球队,球风太差,犯规隐蔽,演戏一流!!! 请问这段代码哪里有误?我用的asp+access。急急急急急急急急急急急急急急! 我想做一个类,提供ONMOUSERMOVE事件给用户接口,怎么做,在线等候? 请问关于软件架构,框架和构架的问题 看看别人吧!!!再看看我们!!! 怎么样自动增加一列在select UserID,AreaCode from table 。在先等候,先答来的100 全民健身 有谁使用过水晶报表? 求线段作另一线段的垂足 请问哪里有Delphi 6的控件下载? 怎么调用api画多边形? 求线段作另一线段的垂足 谁能帮我!错手把逻辑盘的东西删了,能不能恢复。 如何把一个文本文件的内容赋值给一个char* 大连高程何时报名? 需要这样功能的远程控制工具.... 谁知道广州搞php OR asp一月多少钱? 如何给JButton响应Enter键. W2K2000中的 SP 是干什么? 问题整理:求教关于Bezier的方程!!! 关于DJGPP和NASM 请问用什么样的方法可以令win98每隔两个小时死一次机或重启?谢谢 交论文的日子快到了--- 请问关于网站建设方面的,有哪些可写的? 50分,请问ms sql2000可以设置只显示用户表,隐藏系统表, JRE?JAVA 运行环境,指的是什么?要如何配呀? 关于记录指针问题? 50分,请问ms sql2000可以设置只显示用户表,隐藏系统表, 请问。。。 怎样在tomcat 401上面配置一个虚拟主机?(更详细的提问) 请各位能不能详细的解释一下客户端代码和服务端代码 activx控件屏蔽右键菜单 大家简单谈一下,现在学Delphi还有多少前途呢? 给大家带来一个好消息!! 谁知道如何使用和管理恒源防毒面具? 酵母菌有纤维素吗?为什么?纤维素存在于植物细胞壁中,还存在于哪? 三当今中国经济发展出现的三高一低及对环境污染的问题如何运用和谐社会的理论阐述形势与政策 能使油脂迅速溶解的物质最好是较常见的物质 具有强极性键的化合物一定是强电解质吗? 甲基环己烷化学性质甲基环己烷具体化学性质 一溶液中可能含有Fe3+ Ag+ Cu2+ ,如何鉴定并分离 海藻酸钠和海藻酸丙二醇脂是不是一种物品 环己烷的化学性质、稳定性、 怎样提高实验室检测数据的准确性 美的微波炉:微波光波组合烧烤用什么容器?说明说微波加热用耐高温塑料容器,玻璃,瓷器,不能用铁容器,而光波只能用铁容器,那微波光波组合用什么容器? 2,4-戊二酮与2-丙酮如何鉴别? 在初中教材中选择一个实验,运用评价策略设计一个实验报告单,并说明运用了什么样的评价策略.实验报告单可参考课程“初中生物实验教学的评价”中的实验报告表1和实验报告4.字数要求: 实验室的试验数据应如何管理? 微波炉微波和光波组合功能能用什么容器我有一个格兰仕的光波炉,说明书上说在光波和微波组合状态下可以使用金属网架,烧烤接油盘,但就是不能用金属器皿,这个金属网架和烧烤接油盘不就 初中生物实验报告单如何填 一位同学在实验室连续测量了一杯热水的温度,得到了以下数据一分钟:76度两分钟:74度三分钟:72度四分钟:70度五分钟:68度六分钟:66度七分钟:64度(1)水温的变化说明了什么?(2)如 美的微波炉有一种(光波微波)组合能用金属器皿吗?不是说微波不能用金属器皿吗?可是组合档里也有一段...美的微波炉有一种(光波微波)组合能用金属器皿吗?不是说微波不能用金属器皿 同步题库二1.对阿基米德定律正确的叙述是( ).A.浸在液体中的物体,受到向上的浮力,浮力就是物体所排开的液体受到的重力B.浸在水中的物体,受到向上的浮力,浮力大小等于物体所排开的液体 临床试验中的各种实验室数据应如何记录 甘油聚醚是否就是聚丙二醇? 如图实验名称为? 请问,你知道如何鉴定分离 Ag+ 、 Cu2+ 、Ni2+ 异丙二醇聚醚是不是丙二醇聚醚 1.有一个铜块挂在弹簧秤上,当铜块全部浸没水中时,弹簧秤的读数是( ).A.铜块所受重力 B.铜块所受浮力 C.铜块所受重力与浮力之差2.一个实心的铁球和一个实心的铝球在空气中用弹簧秤称时物 为什么有时候冲完水后水管会响? 圆柱形容器底面积是500平方厘米,高为40cm,盛满水后放在水平放置的接水盘中,现将一质量为7.9kg的实心正方体金属块轻轻地放入圆柱形容器中,静止时如图所示,此时测得溢出的水的体积为1dm3.( 使用电能对减少污染,保护环境有利的一个具体例子. 尼龙66和pc材质的性能区别是什么,那个好? 丙二醇嵌段聚醚是什么? 杭州建设发展中出现的环境污染事例 杭州十一五在绿色城市建设中的例子 世博中环保事例 各3个,对不起太穷, 浓度差别不大的Fe3+、K+、Ca2+、Na+、Mg2+、Al3+、Zn2+、Fe2+、(H+)、Cu2+、Hg2+、Ag+放电顺序? 合成聚氨酯的聚醚二醇和聚丙二醇是一种物质么?急于购买, 请问腌咸菜时,发现坛子里的咸菜上长毛了,这样的咸菜还能吃吗? 电解池放电顺序Ag+>Fe3+ >Cu2+>H+>Pb2+>Sn2+>Fe2+>Zn2+>(H+)> Al3+>Mg2+>Na+>Ca+>K+求高人解释Cu2+>H+的后面还有一个带括号的(H+)、那个是什么情况.能举个例子说明一下吗.我在网上查说是::当离子浓度相差 为什么冰块放在可乐里会有气泡?首先说明啊,气体溶解度随温度降低而增大的,其他几种解释一直不太明白,求高人解答 除了植物细胞,还有什么生物细胞有细胞壁 高锰酸钾 二氧化硫,高锰酸钾 二氧化硫时先是浑浊,然后是高锰酸钾腿色,为什么!浑浊的是什么啊!急 为什么在冰里面有被冻住的气泡,那些气泡看上去像是在向上升.不是说气体在水中温度越高溶解度越小吗?那么空气在水中的溶解度是是随温度升高而增?还是········ 除了植物细胞和细菌,还有什么生物体的细胞有细胞壁? 2Na2O2 + 2CO2 ===2Na2CO3+O2 中,Na2O2 (CO2) 中氧元素的化合价是升高了还是降低了?氧化还原反应里两反应物有共同元素怎么判断化合价升降? 常压蒸馏和薄层分析的实验操作要点,实验原理是什么? 卤代烃消去反应中加入乙醇的目的是什么 Ex1.下列反应既不需要加氧化剂,也不需要加还原剂的是,Na2O2------O2 为什么 溶液中含有五种离子,SO32-,SO42-,HCO3-,NO3-,CO32-,加入过氧化钠后,仅硝酸根浓度不变,.为什么硫酸根浓度会变 未知混合溶液中存有Ag+ Cd2+ AL3+ Cu2+ Ca2+,请设计实验分离鉴定设计方案1.取一滴混合溶液在点滴板上+一滴0.5MOL/L的K4[FE(CN)6)——红棕色沉淀——检出铜离子2.加盐酸——氯化银;Cd2+ AL3+ Cu2+ Ca2+3. 白矾灭菌后为什么会变色 甘油是有机物还是油脂?如题, 分离并鉴定Cu2+,Ag+,Fe3+,Al3+,Ba2+ 明矾能用于自来水厂消毒吗 明矾与氢氧化钡如何反应,这里氢氧化贝逐滴滴至过量,明矾是10ml.要求生成沉淀物的最大质量,还有加入过量氢氧化贝的离子方程式 恒源防毒面具效果好不好? 84消毒液和明矾可以同时放入水井消毒吗 明矾与氢氧化钡以1:4反应离子方程式试卷系甘写的,我都想知道,,最好写明点吧,完整的化学方程式和离子方程式 恒源防毒面具性价比怎么样? 哪种盐溶于水吸热?我记不清是硝酸铵还是氯化铵了. 水平桌面上放有一柱形容器,底面积为500cm\1,里面装有深度为20cm的水;在水平桌面上放有一柱形容器,底面积为500cm,里面装有深度为20cm的水;一个重力为2N的开口玻璃杯A,其底部与一个体积为50c 从石油中得到汽油,可用蒸馏 为什么淀粉比纤维素常见啊?植物中只要有细胞壁就有纤维素啊! 环乙烷和环己烷的区别
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘