这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发贴总以“小弟”自称。也发过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; 

  希望对大家有所帮助。

用Delphi中的Indy控件实现收发邮件相关推荐

  1. delphi中的第三方控件如何安装 (转)

    最佳答案 由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组 件的安装方法介绍一下. 1只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码 ...

  2. delphi中的第三方控件如何安装

    由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组 件的安装方法介绍一下. 1只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公  布. ...

  3. Delphi中ComPort串口控件通信中的数据处理

    http://www.cnblogs.com/gaiyang/archive/2011/09/02/2163265.html 1.串口通信的基本原理: 一般计算机与外部设备通讯有两种方式: 并行传送( ...

  4. 怎样在Delphi中屏蔽Flash控件的右键弹出菜单

    关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些, ...

  5. 在delphi中引用第三方控件时,找不到dcu的解决办法

    好久没有使用delphi7来编程了,由于以前的一个项目需要升级,今天又重拾delphi7.不得不说在当时delphi真的好强,可惜了borland,它曾经是我心中的英雄,编程的首选.闲话少说步入正题. ...

  6. delphi中利用Indy的TIdFtp控件实现FTP协议

    2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载.现在很多应用都需 ...

  7. delphi多线程超时控Delphi7中Indy控件对于网络数据的接收

    1.引言 随着我国经济和社会的发展,水资源的科学管理与合理配置显得越来越重要.而获取大量的.实时的.动态的水资源及其相关信息则是实现水资源科学管理的基础.传统的水资源信息获取采用人工抄取数据后逐级的方 ...

  8. DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决

    公司一个大型的项目中使用了 DELPHI 来开发 OCX 控件做数据库的管理,但是GIS图形系统使用 MFC 开发,最后将 OCX 嵌入到 MFC 程序中作为一个完整的系统交付用户使用,但是在使用过程 ...

  9. 在Delphi中使用indy SMTP发送gmail邮件[转]

    在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30|  分类: Delphi |  标签: |举报 |字号大中小 订阅 在Delphi中发送emai ...

最新文章

  1. 数字图像处理及MATLAB实现实验五——图像增强
  2. estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
  3. Spring事物的实现方式和原理以及隔离级别
  4. Linux_PAM_用户之间的信息传递
  5. 3_Long Short Term Memory (LSTM)
  6. linux mysql恢复数据_Mysql数据恢复和备份
  7. 8.1-5shell介绍 ,命令历史 ,命令补全和别名,通配符,输入输出重定向
  8. Java long传到前台精度损失解决方案
  9. Spring Boot -logback 使用
  10. java winform 工具,重拾JAVA之WinForm实战之(六)
  11. 什么是1号信令、7号信令和PRI信令?
  12. NAS外网远程访问的方式
  13. 努比亚手机安装linux,努比亚红魔5G电竞手机将发布;Linux版荣耀MagicBook降价促销...
  14. html学习(06)-网页制作【学成在线】
  15. 半导体器件物理【5】固体量子 —— 能带与k空间
  16. QIIME 2 2020.8 版本更新学习
  17. C/C++编程解析PE文件结构
  18. python下载整个网站_python – Selenium下载整个HTML
  19. 兄弟机cnc系统面板图解_数控机床操作面板图文详解
  20. 使用squid配置上网代理服务器

热门文章

  1. 毕设日志——tensorboardX无法连接的问题
  2. 秒懂文件路径 / 和 ./ 和 ../ 和 ../../
  3. NB-IoT 的“前世今生”
  4. CECC2018赛季收官站我国×××手夺得年度总冠军
  5. zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
  6. Linux系统下的权限详解-1
  7. hadoop-2.6.5安装
  8. 超频,如何超频CPU和显卡?
  9. angularjs 模块化
  10. javascript本地,宿主,内置对象