Indy TIdPOP3和TIdMessage如何接收邮件

本文介绍如何使用Delphi和Indy组件库实现邮件客户端的基本功能,包括发送带附件的邮件及接收邮件。
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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值