在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
TIdPOP3组件简介 TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。 在使用TIdPOP3组件时需设置它的几个成员属性。 Host :指定邮件服务器,一般为pop3邮件服务器的地址,如 pop3.126.com。 Username :用户名,也就是邮箱名,如[email protected]。 Password :邮箱密码,在进行收发邮件时组件需要凭密码进行登录。 其它成员属性 Connected:返回它与邮件服务器的连接状态,这true表示已经连接。 CheckMessages:邮件数,如果连接服务器成功,则可以获得服务器端的邮件数。
成员函数 procedure Connect(const ATimeout: Integer = IdTimeoutDefault); 与服务器连接函数。参数为无效连接时等待的毫秒数。 function RetrieveHeader(const MsgNum: Integer; AMsg: TIdMessage): Boolean; 接收邮件头信息,它有两个参数,MsgNum表示在接收第几个邮件,从1开始,AMsg为邮件消息组件实例。 function Retrieve(const MsgNum: Integer; 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:邮件主题,这个字符串经过BASE64编码的。所以在使用时需对它进行解码。 MessageParts:这是TIdMessageParts类的一个实例,它用来存储邮件的信息。如邮件内容及附件信息。在进行解析时需要判断它是否为附件或文本,如果为附件时,其文件名是经过BASE64编码的。判断常量分别为TIdText , TIdAttachment。
Body:这是个字符串列表,包含构成该邮件的正文内容。 Form:发送邮件者的地址信息。 Recipients:收件人地址信息。 BccList:抄送地址列表。 CharSet:指示邮件信息中使用的字符集。 ContentType:指定MIME媒体数据类型,描述正文中包含的数据,使用户代理决定如何显示数据,常用的有text/html,text/xml。
TIdSMTP组件简介 TIdSMTP是TIdMessageClient派生出的一个简单邮件传输协议和SMTP客户端。 它的主要功能是发送邮件信息。 常用的属性: Host :SMTP邮件服务器的地址,如smtp.126.com。它与上面的POP3地址不一样。 AuthenticationType:服务器认证类型,它有atNone,atLogin两种,即不需要认证和需要凭用户名和密码进行认证。 Username:用户名,这里与TIdPOP3 有点不一样,即它不需要后缀,如billanking2002 Password:邮箱登录密码。如果AuthenticationType设置了atLongin则必须设置密码和用户名。
下面来看下程序源代码: 新建一个DELPHI工程,在窗口中加入TIdPOP3,TIdMessage,TIdSMTP三个组件 加入两个按钮,一个为收邮件,一个为发邮件。加入三个编辑框,一个为服务器地址,一个为用户名,一个为密码。和一个Memo,WebBrowser控件。 下面为其工程的源文件代码。 判断输入的字符串是不是为一个邮件地址。 function TForm1.IsEMail(EMail: String): Boolean; var s: String; ETpos: Integer; begin ETpos:= pos('@',EMail); //主要判断有没有@符 if ETpos> 1 then begin s:= copy(EMail,ETpos+1,Length(EMail)); if (pos('.',s) > 1) and (pos('.',s) < length(s)) then Result:= true else Result:= false; end else Result:= false; end;
BASE64编码转换,这个很重要,因为邮件的标题,及附近的文件名都是经过了编码转换的。
function TForm1.Base64Decode(strInput:string):string; var strDecode : string; posStart : Integer; posEnd : Integer; begin while pos('=?gb2312?b?',lowercase(strInput))>0 do begin try posStart:=pos('=?gb2312?b?',lowercase(strInput)); posEnd:=pos('?=',lowercase(strInput)); strDecode:=strDecode+copy(strInput,1,posStart-1)+IdDecoderMIME1.DecodeString (copy(strInput,posStart+11,posEnd-posStart-11)); strInput:=copy(strInput,posEnd+2,length(strInput)-posEnd-1); finally Application.ProcessMessages; end; end; strDecode := strDecode + strInput; result := strDecode; end;
收邮件功能函数: procedure TForm1.BitBtn1Click(Sender: TObject); var i,j,mnnn,mailcount:integer; tmp:string; begin IdPOP31.Host := e_address.text; dPOP31.Username := e_username.text dPOP31.Password := e_password.text; while true do begin IdPOP31.Connect(); //连接到POP3服务器 if (IdPOP31.Connected = true) then begin break; end else begin IdPOP31.Password :='gozhyflkmcfs'; end; end; mailcount := IdPOP31.CheckMessages; //得到邮箱中邮件的个数 mnnn := 0; for i:=1 to mailcount do /遍历每一封邮件 begin IdMessage1.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 idmessage1.MessageParts.Count-1 do begin try if (IdMessage1.MessageParts.Items[j] is TIdAttachment) then //匹配邮件条目是否是附件 Begin tmp:=Base64Decode(TIdAttachment(IdMessage1.MessageParts.tems[j]).FileName); tmp := 'C:\'+tmp; deletefile(tmp); TIdAttachment(IdMessage1.MessageParts.Items[j]).SaveToFile(tmp); //以原有文件名保存附件在指定目录 end else begin if (idmessage1.MessageParts.Items[j] is TidText) then begin if Message1.Body.Text<>'' then sethtml(WebBrowser1,tidtext(idmessage1.MessageParts.Items[j]).Body.text) else memo1.Lines.Add(tidtext(idmessage1.MessageParts.Items[j]).Body.text); end; end; except continue; end; end; if checkbox1.Checked = true then begin try idpop31.Delete(i); //删除收到的邮件 except continue; end; end; end; idpop31.DisconnectSocket; IdPOP31.Disconnect; end;
发送邮件功能函数:
procedure TForm1.BitBtn2Click(Sender: TObject); var filename:string; begin IdSMTP1.Host := e_address.text; idsmtp1.AuthenticationType := atLogin; //{atNone,atLogin} IdSMTP1.Username := 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 := '[email protected]'; //邮件来自哪里 IdMessage1.Recipients.EMailAddresses:='[email protected]; //收件人 idMessage1.BccList.Add.Text := '[email protected]'; //抄送地址列表 idMessage1.BccList.Add.Text := '[email protected]'; idMessage1.BccList.Add.Text := '[email protected]';
IdMessage1.Subject:= '邮件客户端'; IdMessage1.Body.Text := Memo1.Text; //此处为邮件正文 IdMessage1.CharSet := 'gb2312'; //保证附件正文汉字的正常显示 idmessage1.ContentType := 'text/html'; //超文本方式传输 IdMessage1.Body.Assign(Memo1.Lines); if IdSMTP1.AuthSchemesSupported.IndexOf('LOGIN')>-1 then begin IdSMTP1.AuthenticationType := atLogin; //连接前要保存为Login 上面己设,此处不必要 IdSMTP1.Authenticate; end; try IdSMTP1.Connect(); //连接SMTP服务器 IdSMTP1.Authenticate; IdSMTP1.Send(IdMessage1); //向服务器发送邮箱 finally if IdSMTP1.Connected then IdSMTP1.Disconnect; //断开与服务器的连接 end; end;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/billanking/archive/2010/12/18/6083616.aspx |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论