在delphi中TNMPop控件-------接收电子邮件,pop3
pop3协议自身命令
命令说明
USER向pop3服务器器传递用户名
PASS向pop3服务器器传递用户密码
STAT获取当前用户的邮件数
LIST获取邮件标号和大小
BETR获取邮件的全部信息,包括邮件头和邮件内容
TOP获取邮件头
DELE删除指定的邮件
NOOP空操作
QUIT退出主机对话
控件属性
1、AttachFilePath
指定附件存放路径,为空指当前路径
2、BytesRecvd
收了多少个字节
3、BytesTotal
本次传输总的字节数
4、Connected
与pop3服务器建立了连接则返回true,否则为false
例:
ifnotnmpop31.connectthen
begin
nmpop31.port:=110;
nmpop31.userid:=’username’;
nmpop31.password:=’userpassword’;
nmpop31.connect;
end;
5、DeleteOnRead
如果属性为true时,则当邮件下载后从服务器删除掉
6、host
服务器主机名或ip地址
7、LocalIp
返回客户的IP地址,如果有多个,则只返回第一个。
8、mailcount
返回邮件数
9、mailmessage
调用了getmailmessage方法后,该属性返回检索到的邮件信息,它是一个类
包含了以下几部份:
lAttachments:这是个tstringlist对象:包含了接收到邮件的附件名称
lBody:这是个tstringlist对象:包含了接收到邮件的正文
lFrom:发件人的e_mail地址
lHead:这是个tstringlist对象,包含了邮件头的标题
lMessageID:邮件的识别号
lSubject:邮件的主题
10、password,port,userid
向pop3服务器提交的用户密码,协议端口,用户识别名
11、RemoteIP
pop3服务器的IP地址
12、ReportLevel
指示了与pop3服务器的通话状态信息?
13、Status
返回当前状态信息
14、Summary
是一个类,包含邮件的统计信息。其中包含了以下几部份:
lBytes邮件的字节数;
lFrom发件人的邮件地址
lMessageID邮件的编号
lSubject这是邮件的主题
15、TimeOut
单位毫秒数,当Socket在这里所指定时间内没有响应,将会触发异常。
16、TransactionReply
返回上次命令执行结果。
******************************************************************
控件方法:
1、Abort
中止此次接收,且断开与Pop3服务器的连接。
2、Connect
与Pop3服务器的连接,但事先设好host,port,userid,password属性。
例:
Nmpop31.host:=”mail.wofoo.com”;
Nmpop31.port:=110;
Nmpop31.reportlevel:=1;
Nmpop31.timeout:=1000;
Nmpop31.connect;
3、DeleteMessage(MailNumber:integer)
从Pop3服务器删除一个邮件号为MailNumber的邮件。注:这里并没有真正删除,当在断开边接之前调用reset,将被恢复。
4、Disconnect
断开与Pop3服务器的连接。
5、GetMailMessage(MailNumber:integer)
从Pop3服务器下载一个邮件号为MailNumber的邮件
6、GetSummary(MMailNumber:integer)
得到一个邮件信息,其邮件号为MailNumber。
7、List
从邮件服务器检索一个列表。该列表包含每一封邮件的编号和字节数,列表中的每一项将触发一个Onlist事件。
8、Reset
将恢复服务器中所有标记为已删除的邮件。
**************************************************************
控件事件:
1、OnAuthenticationFailed(Varhandled:Boolean)
登陆服务器时,用户名与密码不能通过,将触发该事件。
更正了后,如果将Handled参数设为True,将再登陆一次。
2、OnAuthenticationNeeded(Varhandled:Boolean)
如果某个操作需要验证用户的身份,将触发这个事件。
例:
procedureTform1.NMPOP31AuthenticationNeeded(Varhandled:Boolean);
varnewpass,newid:string;
begin
newpass:=NMPOP31.password;
newid:=NMPOP31.userid;
inputquery(‘AuthenticationNeed‘,’inputuserid’,newid);
inputquery(‘AuthenticationNeed‘,’inputpassword’,newpass);
NMPOP31.userid;:=newid;
NMPOP31.password:=newpass;
Handled:=true;
end;
3、OnConnect
当与服务器连接成功时将显示触发该事件。
4、OnConnectFailed
当与服务器连接失败时将显示触发该事件
5、OnConnectRequired(Varhandled:Boolean)
Pop控件大多数方法是在与服务器连接成功后才会有意思。如果调用方法时与服务器连接不成功时,将触发该事件。此时应重新调用connect方法,且将Handled参数设为True;
6、OnDisconnect
当与服务器断开连接时将触发该事件,如果要访问VCL控件,最好先判断它存不存在。
7、OnFailure
如果删除该邮件出错时,触发该事件。
8、OnInvalidHost
与主机连接时发现指定主机名不存在,触发该事件。
9、OnList
当程序调用list过程时,每检索到一项将会触发该事件一次。MSG参数是邮
件编号,Size参数是邮件字节数。
10、OnPacketRecvd
每收到一个数据块时,将触发一次该事件。可用BytesTotal和BytesRecvd属性显示邮件接收进度。
11、OnReset
当程序调用Reset过程恢复已经有删除标记的邮件时,触发该事件。
12、OnRetrieveStar
当程序调用GetMailMessage过程或GetSummary过程开始检索数据时将会触发该事件。
13、OnRetrieveEnd
当程序调用GetMailMessage过程或GetSummary过程检索数据成功时将会触发该事件
实例1:
程序如下:
procedureTfrmMail.FormCreate(Sender:Tobject);
begin
//服务器信息
edtIP.text:=’mail.wofoo.com’
edtPort.text:=’110’;
//用户信息
edtUser.text:=’mis’;
edtpass.passwordchar:=’*’;
edtpass.text:=’123’;
//其它
edtmail.text:=’’;
edtsubject.text:=’’;
memo1.lines.clear;
//pop3控件参数设置
NMPOP31.deleteonread:=false;
NMPOP31.timeout:=5000;
NMPOP31.deleteonread:=false;
NMPOP31.Reportlevel:=Status_Basic;
//显示其它选项
memo1.scrollbars:=ssboth;
end;
首先要登陆服务器,在btnConnect的onclick事件中实现。代码如下:
procedureTfrmMail.btnConnectclick(Sender:Tobject);
begin
NMPOP31.host:=edtip.text;
NMPOP31.port:=strtoint(edtport.text);
NMPOP31.userid:=edtuser.text;
NMPOP31.password:=edtpass.text;
NMPOP31.connect;
end;
登陆成功处理:
procedureTfrmMail.NMPOP31Connect(Sender:Tobject);
begin
showmessage(‘连接成功’);
end;
登陆成功失败处理:
procedureTfrmMail.NMPOP31Connect(Sender:Tobject);
begin
showmessage(‘连接失败’);
end;
登陆成功就可获得邮件信息了。按获得邮件按钮进行处理。
procedureTfrmMail.btnGetMailclick(Sender:Tobject);
begin
NMPOP31.list;
end;
用了list方法,当检索到信息时将触发OnList事件。这个事件的参数含有邮件大小等信息。将这些信息添加到listView控件中显示出来。
procedureTfrmMail.NMPOP31list(MSG,size:integer);
var
listitem1:tlistitem;
begin
listitem1:=listview1.items.add;
listitem1.caption:=intostr(msg);
listitem1.subitems.add(intostr(size));
end;
在实际使用过程中,有可能用户在没有登陆服务器之前就使去获取邮件信息了
这时NMPOP3将触发OnConnectionRequired事件。这时可在这里要求重新连
服务器。
procedureTfrmMail.NMPOP31ConnectionRequired(varhandled:boolean);
begin
handled:=true;
NMPOP31.connect;
end;
用户可在listview控件中选择要看的邮件。
procedureTfrmMail.Listview1Click(varhandled:boolean);
varindex,I:integer;
begin
iflistview1.selected:=nilthen
exit;
//获取所选的标识
index:=strtoint(listview1.selected.capton);
//获取邮件
NMPOP31.GetMessage(index);
//获取邮件信息
edtmail.text:=nmpop31.mailmessage.from;
edtsubject.text:=nmpop31.mailmessage.subject;
memo1.lines.assign(nmpop31.mailmessage.body);
end;
其它信息显示
procedureTfrmMail.NMPOP31Success(sender:tobject);
begin
statusbar1.simpletext:=’操作成功’;
end;
procedureTfrmMail.NMPOP31Failure(sender:tobject);
begin
statusbar1.simpletext:=’操作失败’;
end;
procedureTfrmMail.NMPOP31ConnectionFailed(sender:tobject);
begin
showmessage(‘连接失败’);
end;
procedureTfrmMail.NMPOP31InvalidHoat(varhandled:boolean);
begin
showmessage(‘无效的主机’);
handled:=true;
end;
最后退出邮件服务器
procedureTfrmMail.btnDisConnectonClick(sender:tobject);
begin
NMPOP31.disconnect;
end;
procedureTfrmMail.NMPOP31Disconnect(sender:tobject);
begin
statusbar1.simpletext:=’断开连接’;
end;
发送邮件NMSMTP
SMTP协议自身命令
命令说明
HELO客户机用HELO命令向服务器标识身份
MAIL初始化邮件传输
RCPT在MAIL命令后,标识单个邮件接收人
NOOP无操作,服务器响应OK
DATARCPT之后(通常),表示所有邮件接收人已标识,初始化数据传输
HELP客户机可使用此命令查询服务器支持什幺命令
QUIT会话结束
NMSMTP
属性
1、ClearParams属性
为真时,邮件发送完毕会把PostMessage属性的值清空
2、EncodeType
指定邮件编码方式。uuMIME—MIME编码;unCode---UUEncoding编码
3、FinalHeader
指定最后的消息头标。
4、Host
SMTP服务器的主机名或IP地址。
5、LocalIP
返回客户机的IP地址,若有多个只返回一个。
6、Port
指定服务器的端口
7、PostMessage
是一个类,存储要发送的邮件信息。具体如下:
lFromName:发件人名称
lFromAdress:发件人email地址。
lReplayToAdress:回复地址
lOrgranization:发件人所在地址。
lLocalProgram:发件人所用的客户程序
lToAdress:是Tstringlist对象,收件人的接收地址。
lToCC:Tstringlist对象,抄送的email地址。
lToBCC:Tstringlist对象,密送的email地址。
lAttachments:Tstringlist对象,指定的附件。
lBody:Tstringlist对象,邮件正文。
lSubject:邮件主题。
lDate:邮件发送日期,为空指当前日期。
9、ReplayNumber
只读属性,返回smtp服务器响应应答信息。
10、status
当前状态信息。
11、Timeout
毫秒级别的单位,如果规定时间Socket没有响应,触发异常。
12、TransactionReply
返回上一次命令的执行结果。
13、UserID
指定的用户名。
控件方法
1、Abort
中止发送,断开与smtp服务器的连接
2、ClearParameters
清空PostMessage。
3、Connect
登陆SMTP服务器,注意要先设好host,port属性。Host非法触发OnValidHost事件,连接失败触发OnConnectFalied事件。如果连接成功触发OnConnect事件。
4、DisConnect
断开与服务器的连接。触发OnDisconnect事件。
5、ExpandList(MailList:string):Boolean;
该过程在SMTP服务器上检索一个邮件列表,如果有触发OnMailListReturn事件,可以取得这个邮件列表。
6、SendMail
发送邮件,事先要设好host,port,PostMessage
7、Verify(UserName:string):Boolean;
检验用户名是否合法,合法为True;
事件:
1、OnAttachmentNotFound
如果没找到postMessage所指定的邮件,该事件触发,同时有传进附件名的参数。
2、OnAuthenticationFailed
当SMTP需要用户名和口令才能发送,而事先没给用户名和密码或给出的有错,该事件触发。
3、OnConnect
与服务器连接成功后,触发该事件。
4、OnConnectFailed
与服务器连接失败,触发该事件。
5、OnDisconnect
断开与服务器连接触发该事件。
6、OnEnacodeStart
当附件开始编码时,触发该事件
7、OnEnacodeEnd
当附件编码结束时,触发该事件。参数FileName,初编码的附件。
8、OnFailure
当邮件发送不成功时,触发该事件
9、OnHeaderIncomplete
发送邮件时,当postmessage给出的头标信息不完整时,触发
10、OnHostResolved与OnIvalidHost
当服务器的主机名找到触发该事件,否则触发OnIvalidHost
11、OnMailListReturn
当程序调用ExpandList,每检索到一个email地址,就触发该事件一次。
12、OnRecipientNotFound
如果PostMessage所指定的收件人不成再时,触发该事件。
13、OnSendStart
邮件发送开始触发该事件。
14、OnSuccess
邮件发送成功触发该事件。
实例:
procedureTfrmSendMail.btnSendClick(Sender:Tobject);
begin
ifedtAdress.text=’’then
exit;
ifedtport.text=’’then
exit;
ifedtSendusertext=’’then
exit;
ifedtReceiver.text=’’then
exit;
NMSMTP1.host:=edtAdress.text;
NMSMTP1.port:=strtoint(edPort.text);
NMSMTP1.UserId:=edtSenduser.text;
NMSMTP1.conncet;
end;
procedureTfrmSendMail.NMSMTP1ConnectionFailed(Sender:Tobject);
begin
showmessage(‘连接失败’);
end;
procedureTfrmSendMail.NMSMTP1Connection(Sender:Tobject);
begin
sendmessage(Handle,WM_LOGIN,0,0);//自定义消息息传送。产生WM_LOGIN事件
end;
procedureTfrmSendMail.WMLOGIN(varMSG:TWM);//处理自定义消息
begin
//这里发送邮件。
NMSmTP1.postmessage.fromadress:=edtuserMail.text;
NMSmTP1.postmessage.fromname:=edtsenderuser.text;
NMSmTP1.postmessage.subject:=edtsubject.text;
NMSmTP1.postmessage.toadress.add(edtreceiver.text);
NMSmTP1.postmessage.attachments.addstrings(listbox1.items);
NMSmTP1.postmessage.body.assign(memo1.lines);
NMSMTP1.SENDMAIL;
NMSMTP1.DISCONNCET;
end;
分享到:
相关推荐
在Delphi中,收发电子邮件是常见的需求,尤其是在企业级应用或系统集成中。本文将详细介绍如何使用Delphi进行邮件的发送和接收,并且能够处理邮件附件。 首先,Delphi支持多种库来处理邮件功能,如Indy(Internet ...
《Delphi7编程技巧与实例精解》这本书深入探讨了Delphi 7这一经典版本的编程技术,旨在帮助开发者掌握高效、实用的编程方法。Delphi 7是Borland公司(现为Embarcadero Technologies)推出的一款强大的集成开发环境...
在本文中,我们将深入探讨如何使用Delphi编程语言来实现一个仿照Foxmail的电子邮件客户端。这个客户端将支持通过POP3协议接收邮件以及通过SMTP协议发送邮件。我们将使用Indy库,这是一个强大的网络通信组件集,特别...
Delphi 实现邮件收发功能 Delphi 是一款功能强大且灵活的开发工具,通过使用 Delphi,我们可以轻松地实现邮件收发功能,并且拥有收发附件、删除邮箱中已收邮件的功能。这样,我们可以打造适合自己操作习惯的邮件...
Delphi7编程技巧与实例精解, 送给大家
DELPHI编程实例详解 DELPHI是一种强大的对象 Pascal 编程语言,广泛应用于桌面应用开发,以其高效、直观和丰富的组件库著称。对于初学者来说,掌握DELPHI编程技术不仅能提升软件开发能力,还能为后续深入学习其他...
用Delphi2010 实现邮件附件收发功能 TIdPOP3组件简介 TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。 在使用TIdPOP3组件时需设置它的几个成员属性。 Host :指定邮件服务器,...
在IT行业中,电子邮件的收发是一项基础且重要的功能,尤其对于开发者来说,了解如何通过编程实现这一功能至关重要。本主题将深入探讨使用Delphi编程语言,结合POP3、SMTP和IMAP4协议来完成邮件的收发。这些协议是...
《Delphi 5编程实例与技巧》是一本深入探索Delphi 5开发技术的书籍,旨在帮助程序员提高在Delphi 5环境下编写高效、稳定、功能丰富的应用程序的能力。Delphi 5是Borland公司在2000年推出的一款强大的可视化组件化...
介绍了在delphi 7中如何实现收发邮件功能,并且有收发附件,删除邮箱中已收邮件的功能。这样能打造适合自己操作习惯的邮件管理工具
DELPHI 5编程实例与技巧是一本专为Delphi开发者设计的实用指南,它深入浅出地介绍了Delphi 5这一经典版本的编程技术、最佳实践和实用技巧。这本书籍旨在帮助读者从初级到高级逐步提升Delphi编程能力,无论你是初学者...
DELPHI数据库编程实例是关于使用DELPHI这一强大的集成开发环境进行数据库应用程序设计和开发的实践教程。在DELPHI中,数据库编程是至关重要的一个环节,它使得开发者能够创建能够存储、检索和处理大量数据的应用程序...
《DELPHI高级编程实例精解》是一本深入探讨DELPHI编程技术的书籍,它通过丰富的实例,为读者展示了如何在实践中应用DELPHI进行高效且复杂的软件开发。DELPHI作为一款强大的面向对象的编程环境,因其高效、直观的特性...
delphi 5编程实例与技巧 大量编程技巧,大最实例讲解
《突破Delphi 7.0编程实例五十讲》是一本专为Delphi初学者和爱好者设计的实践教程,旨在通过丰富的实例帮助读者深入理解和掌握Delphi编程技术。书中的每一个实例都配有源代码和详尽的讲解,使学习者能够快速上手,...
《Delphi 5实例编程与技巧》是一本专注于Delphi 5编程技术的书籍,旨在帮助程序员提升在该平台上的编程技能。Delphi 5是一款经典的面向对象的集成开发环境(IDE),由Borland公司发布,它基于Pascal语言,并提供了...
在Delphi编程环境中, Indy(Internet Direct)控件集是一个强大的工具,用于实现各种网络通信功能,包括电子邮件的发送和接收。"delphi 邮件收发"这个项目利用了Indy控件来处理SMTP(Simple Mail Transfer Protocol...