用Delphi中的Indy控件实现收发邮件

 这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发贴总以“小弟”自称。也发过N多关于此类问题的贴子,但总是收益甚少,但也十分感谢参与贴子的各位同仁。必竟,用 Indy 控件实现收发邮件的例子太少了,于是小弟决定写一篇关于 Indy 收发邮件的文章,供大家参考。由于本人才疏学浅,故难免有不少谬误,还请各位见谅。 

  在做例子之前,应明白整个发送和接收邮件流程: 
   
  从此流程可以看出,客户向 smtp 服务器发出邮件后,由 smtp 服务器负责向收件人发出最终信件,这个过程由服务器完成,客户无需操心。客户所关心的只是怎样将邮件发送到 smtp 服务器上去。POP3更简单了,只需要正确登录到 POP3服务器上,再下载需要的邮件即可。 
  用 Indy 创建收发电子邮件的例子: 
  1、创建工程,在窗体中加入 IdSMTP1、IdMessage1和 IdPOP31(Indy 控件标签组)控件各一个。 
  2、设置 IdSMTP1.Host :='SMTP.163.com';(我用的是163检试,具体也可选择其它服务器) IdSMTP1.Username :='caoyan528';(此处即表示邮箱的帐号名,例如邮箱为:,则Username 即为 aaaaaa) IdSMTP1.Password :='XXXXXXXX';(此处即为邮箱的密码,如邮箱密码为123456,则 Password 即为123456)。 
  3、设置 IdMessage1.From.Address :='caoyan_528@163.com';(注意,此处的邮箱地址应在smtp.163.com中存在且就为以上设置的Username),IdMessage1.Recipients.EMailAddresses:(此处表示收件人地址,只要是任何一个存在的邮箱地址即可) 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
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
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则必须设置密码和户名。
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值