Indy TIdPOP3和TIdMessage如何接收邮件

var
   filename: string ;
begin
   if  idsmtp1 . Connected  then
     idsmtp1 . Disconnect
   else
   begin
     idsmtp1 . Host :=  'smtp.usish.com' ;
     idsmtp1 . Username :=  'huang_xiao' ;
     idsmtp1 . Password:= 'huang' ;
     idsmtp1 . authenticationtype:=atlogin;
     idsmtp1 . Port:= 25 ;
     idsmtp1 . Connect;
   end ;
   idmessage1 . From . Address:= 'huang_xiao@usish.com' ;
   idmessage1 . Recipients . EMailAddresses:= 'huang_xiao@usish.com' ;
   idmessage1 . From . Name:= 'THOMAS' ;
   idmessage1 . Subject:= 'test' ;
   idmessage1 . Body . Text:= 'hengheng' ;
   filename :=  'c:\x.ods' ;
   TIdAttachment . Create(IdMessage1 . MessageParts,filename);
   idsmtp1 . Send(idmessage1);
end ;
 
 
 
 
1 、创建工程,在窗体中加入IdSMTP1、IdMessage1和IdPOP31(Indy控件标签组)控件各一个。
 
         2 、设置     IdSMTP1 . Host :=  'SMTP.163.com' ;(我用的是 163 检试,具体也可选择其它服务器)     IdSMTP1 . Username :=  'caoyan528' ;(此处即表示邮箱的帐号名,例如邮箱为:aaaaaa@ 163. com,则Username即为aaaaaa)     IdSMTP1 . Password :=  'XXXXXXXX' ;(此处即为邮箱的密码,如aaaaaa@ 163. com邮箱密码为 123456 ,则Password即为 123456 )。
 
        3 、设置IdMessage1 . From . Address :=  'caoyan_528@163.com' ;(注意,此处的邮箱地址应在smtp .163. com中存在且就为以上设置的Username),IdMessage1 . Recipients . EMailAddresses := ‘caoyan528@gmail . com’(此处表示收件人地址,只要是任何一个存在的邮箱地址即可)   IdMessage1 . Subject:=  '第一个邮件客户端' ;(主题)具体源代码如下:
 
procedure  TForm1 . Button4Click(Sender: TObject);
var
    filename :  String ;
 
    tmpEMailItem : TIdEMailAddressItem;
    // tmpEmailAdd :   TIdEmailAddressList;
begin
    try
      IdSMTP1 . Host :=  'SMTP.163.com' ;
 
      IdSMTP1 . AuthenticationType := atLogin;  //保证登录模式为Login
      IdSMTP1 . Username :=  'caoyan_528' ;
      IdSMTP1 . Password :=  'XXXXXX' ;
      filename :=  'E:\邮件发送程序\2003-12-22_253_04.jpg' ;     //需要添加的附件文件
      TIdAttachment . Create(IdMessage1 . MessageParts,filename);    //添加附件
 
     IdMessage1 . From . Address :=  'caoyan_528@163.com' ;
      IdMessage1 . Recipients . EMailAddresses:= 'caoyan528@gmail.com' ;
 
      tmpEMailItem := IdMessage1 . Recipients . Add;    //添加一个地址列表
 
      tmpEMailItem . Text :=  'caoyan528@gmail.com' //写一个收件人
 
      idMessage1 . BccList . Add . Text :=  'caoyan_528@yahoo.com.cn' ;    //书写多个目标地址,实现群发
 
      idMessage1 . BccList . Add . Text :=  'caoyan_528@163.com' ;    //书写多个目标地址,实现群发
 
 
      IdMessage1 . Subject:=  '第一个邮件客户端' ;
      IdMessage1 . Body . Text := Memo1 . Text;     //此处为邮件正文
 
      IdMessage1 . CharSet :=  'gb2312' ;    //保证附件正文汉字的正常显示
      IdMessage1 . Body . Assign(Memo1 . Lines);    
      if  IdSMTP1 . AuthSchemesSupported . IndexOf( 'LOGIN' )>- 1  then
      begin
        IdSMTP1 . AuthenticationType := atLogin;  //连接前要保存为Login   上面己设,此处不必要
        IdSMTP1 . Authenticate;
      end ;
 
      IdSMTP1 . Connect();    //连接SMTP服务器
      IdSMTP1 . Authenticate;
      IdSMTP1 . Send(IdMessage1);    //向服务器发送邮箱
    finally
      IdSMTP1 . Disconnect;    //断开与服务器的连接
    end ;
end ;
 
自此,memo1中所写的内容被当作邮件发送了出去。而filename所指的附件也一同被发送到了服务器。
 
 
4 、接收邮件
 
收以上的流程图不难看出,接收邮件完全是POP3服务器来完成的,客户只需连接到POP3服务器即可下载邮件。具体做法如下:
 
设置IdPOP31 . Host := POP .163. com       IdPOP31 . Username :=  'caoyan_528' ;        IdPOP31 . Password:=  'XXXXX' ;       (此处的设置与SMTP的设置相同)     源代码如下:
 
procedure  TForm1 . Button5Click(Sender: TObject);
var
    mailcount :  integer ;
    i :  integer ;
    tmp :  string ;
begin
    IdPOP31 . Connect();      //连接到POP3服务器
    mailcount := IdPOP31 . CheckMessages;    //得到邮箱邮件的各数
    for  i:= 1  to  mailcount  do     //遍历每一封邮件
    begin
       IdMessage1 . Clear;
       IdPOP31 . retrieveHeader(i,IdMessage1);    //得到邮件的头信息
       tmp := IdMessage1 . Subject;        //得到邮件的标题
       Memo1 . Lines . Add(tmp);
       IdPOP31 . Retrieve(i,IdMessage1);    //接收到邮件所有内容
       tmp := IdMessage1 . Body . Text;     //邮件正文 
       memo1 . Lines . Add(tmp);
    end ;
    IdPOP31 . Disconnect;     //断开连接
end ;
Delphi2010 实现邮件附件收发功能 TIdPOP3组件简介 TIdPOP3 是用来接收邮件服务器的邮件信息到用户端的一个组件。它实现了RFC 1939协议。 在使用TIdPOP3组件时需设置它的几个成员属性。 Host :指定邮件服务器,一般为pop3邮件服务器的地址,如 pop3.126.com。 Username :用户名,也就是邮箱名,如billanking2002@126.com。 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则必须设置密码和用户名。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值