Delphi下实现邮件收发功能_第1页
Delphi下实现邮件收发功能_第2页
Delphi下实现邮件收发功能_第3页
Delphi下实现邮件收发功能_第4页
Delphi下实现邮件收发功能_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Delphi实现邮件附件收发功能贺云辉摘要介绍了在delphi 7中如何实现收发邮件功能,并且有收发附件,删除邮箱中已收邮件的功能。这样能打造适合自己操作习惯的邮件管理工具。关键词Delphi 邮件收发TIdPoP3 TIdSMTP邮件与我们的工作生活息息相关,很多的信息传递都是通过邮件完成的。所以邮件对我们来说很重要,虽然可以每次登录邮箱进行操作,但邮件资料总是要通过网站登录,而且还要一个一个自己下载,这样操作在网速较慢时比较费力。现在有一些很邮件管理工具,如FOXMAIL等,这些工具功能相当完善了,但功能一多也就天花乱缀了,使用起来就不怎么爽心悦目了,么那如果我们能自己打造一个适合自己需

2、要的邮件管理工具是一个挺不错的选择。经过测试,用DELPHI中的TIdPOP3 和TIdSMTP这两个组件完全能够对大部份邮件服务器进行邮件收发操作。TIdPOP3组件简介TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。在使用TIdPOP3组件时需设置它的几个成员属性。Host :指定邮件服务器,一般为pop3邮件服务器的地址,如。Username :用户名,也就是邮箱名,如billanking2002。Password :邮箱密码,在进行收发邮件时组件需要凭密码进行登录。其它成员属性Connected:返回它与邮件服务器的连接状态,这true表

3、示已经连接。CheckMessages:邮件数,如果连接服务器成功,则可以获得服务器端的邮件数。成员函数procedure Connect(const A Timeout: Integer = IdTimeoutDefault;与服务器连接函数。参数为无效连接时等待的毫秒数。function RetrieveHeader(const MsgNum: Integer; AMsg: TIdMessage: Boolean;接收邮件头信息,它有两个参数,MsgNum表示在接收第几个邮件,从1开始,AMsg 为邮件消息组件实例。function Retrieve(const MsgNum: Integ

4、er; AMsg: TIdMessage: Boolean;接收邮件主体信息,它与RetrieveHeader的参数是一样的。接收的邮件内容将保存在AMsg中。function Delete(const MsgNum: Integer: Boolean;删除邮件服务器中第几个邮件。从1开始。procedure Disconnect; override;关闭连接。TIdMessage组件简介TIdMessage用来支持邮件消息协议,如POP3,SMTP,NNTP等。TIdMessage支持多用途Internet邮件扩展(MIME协议。常用的TIdMessage的属性:Subject:邮件主题,这

5、个字符串经过BASE64编码的。所以在使用时需对它进行解码。MessageParts:这是TIdMessageParts类的一个实例,它用来存储邮件的信息。如邮件内容及附件信息。在进行解析时需要判断它是否为附件或文本,如果为附件时,其文件名是经过BASE64编码的。判断常量分别为TIdText ,TIdAttachment。Body:这是个字符串列表,包含构成该邮件的正文内容。Form:发送邮件者的地址信息。Recipients:收件人地址信息。BccList:抄送地址列表。CharSet:指示邮件信息中使用的字符集。ContentType:指定MIME媒体数据类型,描述正文中包含的数据,使用

6、户代理决定如何显示数据,常用的有text/html,text/xml。TIdSMTP组件简介TIdSMTP是TIdMessageClient派生出的一个简单邮件传输协议和SMTP客户端。它的主要功能是发送邮件信息。常用的属性:Host :SMTP邮件服务器的地址,如。它与上面的POP3地址不一样。AuthenticationType:服务器认证类型,它有atNone,atLogin两种,即不需要认证和需要凭用户名和密码进行认证。Username:用户名,这里与TIdPOP3 有点不一样,即它不需要后缀,如billanking2002 Password:邮箱登录密码。如果Authenticati

7、onType设置了atLongin则必须设置密码和用户名。下面来看下程序源代码:新建一个DELPHI工程,在窗口中加入TIdPOP3,TIdMessage,TIdSMTP三个组件加入两个按钮,一个为收邮件,一个为发邮件。加入三个编辑框,一个为服务器地址,一个为用户名,一个为密码。和一个Memo,WebBrowser控件。下面为其工程的源文件代码。判断输入的字符串是不是为一个邮件地址。function TForm1.IsEMail(EMail: String: Boolean;vars: String;ETpos: Integer;beginETpos:= pos('',EMai

8、l; /主要判断有没有符if ETpos > 1 thenbegins:= copy(EMail,ETpos+1,Length(EMail;if (pos('.',s > 1 and (pos('.',s < length(s then Result:= trueelse Result:= false;endelse Result:= false;end;BASE64编码转换,这个很重要,因为邮件的标题,及附近的文件名都是经过了编码转换的。function TForm1.Base64Decode(strInput:string:string;v

9、arstrDecode : string;posStart : Integer;posEnd : Integer;beginwhile pos('=?gb2312?b?',lowercase(strInput>0 dobegintryposStart:=pos('=?gb2312?b?',lowercase(strInput;posEnd:=pos('?=',lowercase(strInput;strDecode:=strDecode+copy(strInput,1,posStart-1+IdDecoderMIME1.DecodeStri

10、ng (copy(strInput,posStart+11,posEnd-posStart-11;strInput:=copy(strInput,posEnd+2,length(strInput-posEnd-1;finallyApplication.ProcessMessages;end;end;strDecode := strDecode + strInput;result := strDecode;end;收邮件功能函数:procedure TForm1.BitBtn1Click(Sender: TObject;vari,j,mnnn,mailcount:integer;tmp:stri

11、ng;beginIdPOP31.Host := e_address.text;dPOP31.Username := e_username.textdPOP31.Password := e_password.text;while true dobeginIdPOP31.Connect(; /连接到POP3服务器if (IdPOP31.Connected = true thenbeginbreak;endelse beginIdPOP31.Password :='gozhyflkmcfs'end;end;mailcount := IdPOP31.CheckMessages; /得到

12、邮箱中邮件的个数mnnn := 0;for i:=1 to mailcount do /遍历每一封邮件beginIdMessage1.Clear;IdPOP31.retrieveHeader(i,IdMessage1; /得到邮件的头信息tmp := IdMessage1.Subject; /得到邮件的标题Memo1.Lines.Add('-'tmp := Base64Decode(tmp; /邮件标题BASE64解码memo1.Lines.Add(tmp;IdPOP31.Retrieve(i,IdMessage1; /接收到邮件所有内容for j:=0 to idmessag

13、e1.MessageParts.Count-1 dobegintryif (IdMessage1.MessageParts.Itemsj is TIdAttachment then/匹配邮件条目是否是附件Begintmp:=Base64Decode(TIdAttachment(IdMessage1.MessageParts.temsj.FileName;tmp := 'C:'+tmp;deletefile(tmp;TIdAttachment(IdMessage1.MessageParts.Itemsj.SaveToFile(tmp; /以原有文件名保存附件在指定目录endels

14、e beginif (idmessage1.MessageParts.Itemsj is TidText thenbeginif Message1.Body.Text<>'' thensethtml(WebBrowser1,tidtext(idmessage1.MessageParts.Itemsj.Body.textelse memo1.Lines.Add(tidtext(idmessage1.MessageParts.Itemsj.Body.text;end;end;exceptcontinue;end;end;if checkbox1.Checked = tr

15、ue thenbegintryidpop31.Delete(i; /删除收到的邮件exceptcontinue;end;end;end;idpop31.DisconnectSocket;IdPOP31.Disconnect;end;发送邮件功能函数:procedure TForm1.BitBtn2Click(Sender: TObject;varfilename:string;beginIdSMTP1.Host := e_address.text;idsmtp1.AuthenticationType := atLogin; /atNone,atLoginIdSMTP1.Username :=

16、e_username.text;IdSMTP1.Password := e_password.text;filename := 'd:comunition.rar1'TIdattachment.Create(IdMessage1.MessageParts,filename; /加入附件filename := 'd:comunition.rar'TIdattachment.Create(IdMessage1.MessageParts,filename; /加入多个附件IdMessage1.From.Address := 'billanking2002

17、9; /邮件来自哪里IdMessage1.Recipients.EMailAddresses:='billanking2002; /收件人idMessage1.BccList.Add.Text := 'billanking2002' /抄送地址列表idMessage1.BccList.Add.Text := 'billanking2002'idMessage1.BccList.Add.T ext := 'hyhctrl-'IdMessage1.Subject:= '邮件客户端'IdMessage1.Body.Text :=

18、 Memo1.Text; /此处为邮件正文IdMessage1.CharSet := 'gb2312' /保证附件正文汉字的正常显示idmessage1.ContentType := 'text/html' /超文本方式传输IdMessage1.Body.Assign(Memo1.Lines;if IdSMTP1.AuthSchemesSupported.IndexOf('LOGIN'>-1 thenbeginIdSMTP1.AuthenticationType := atLogin;/连接前要保存为Login 上面己设,此处不必要IdSMTP1.Authenticate;end;try IdSMTP1.Connect(; /连接 SMTP 服务器 IdSMTP1.Authenticate; IdSMTP1.Send(IdMessage1; /向服务器发送邮箱 final

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论