用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;
希望对大家有所帮助。
用Delphi中的Indy控件实现收发邮件相关推荐
- delphi中的第三方控件如何安装 (转)
最佳答案 由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组 件的安装方法介绍一下. 1只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码 ...
- delphi中的第三方控件如何安装
由于组件提供的方式不同,所以安装的方法也是不一样的,下面就目前常见的各种形式的组 件的安装方法介绍一下. 1只有一个DCU文件的组件.DCU文件是编译好的单元文件,这样的组件是作者不想把源码公 布. ...
- Delphi中ComPort串口控件通信中的数据处理
http://www.cnblogs.com/gaiyang/archive/2011/09/02/2163265.html 1.串口通信的基本原理: 一般计算机与外部设备通讯有两种方式: 并行传送( ...
- 怎样在Delphi中屏蔽Flash控件的右键弹出菜单
关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截 Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单 些, ...
- 在delphi中引用第三方控件时,找不到dcu的解决办法
好久没有使用delphi7来编程了,由于以前的一个项目需要升级,今天又重拾delphi7.不得不说在当时delphi真的好强,可惜了borland,它曾经是我心中的英雄,编程的首选.闲话少说步入正题. ...
- delphi中利用Indy的TIdFtp控件实现FTP协议
2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载.现在很多应用都需 ...
- delphi多线程超时控Delphi7中Indy控件对于网络数据的接收
1.引言 随着我国经济和社会的发展,水资源的科学管理与合理配置显得越来越重要.而获取大量的.实时的.动态的水资源及其相关信息则是实现水资源科学管理的基础.传统的水资源信息获取采用人工抄取数据后逐级的方 ...
- DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决
公司一个大型的项目中使用了 DELPHI 来开发 OCX 控件做数据库的管理,但是GIS图形系统使用 MFC 开发,最后将 OCX 嵌入到 MFC 程序中作为一个完整的系统交付用户使用,但是在使用过程 ...
- 在Delphi中使用indy SMTP发送gmail邮件[转]
在Delphi中使用indy SMTP发送gmail邮件[转] 2012-01-01 22:44:30| 分类: Delphi | 标签: |举报 |字号大中小 订阅 在Delphi中发送emai ...
最新文章
- 数字图像处理及MATLAB实现实验五——图像增强
- estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
- Spring事物的实现方式和原理以及隔离级别
- Linux_PAM_用户之间的信息传递
- 3_Long Short Term Memory (LSTM)
- linux mysql恢复数据_Mysql数据恢复和备份
- 8.1-5shell介绍 ,命令历史 ,命令补全和别名,通配符,输入输出重定向
- Java long传到前台精度损失解决方案
- Spring Boot -logback 使用
- java winform 工具,重拾JAVA之WinForm实战之(六)
- 什么是1号信令、7号信令和PRI信令?
- NAS外网远程访问的方式
- 努比亚手机安装linux,努比亚红魔5G电竞手机将发布;Linux版荣耀MagicBook降价促销...
- html学习(06)-网页制作【学成在线】
- 半导体器件物理【5】固体量子 —— 能带与k空间
- QIIME 2 2020.8 版本更新学习
- C/C++编程解析PE文件结构
- python下载整个网站_python – Selenium下载整个HTML
- 兄弟机cnc系统面板图解_数控机床操作面板图文详解
- 使用squid配置上网代理服务器
热门文章
- 毕设日志——tensorboardX无法连接的问题
- 秒懂文件路径 / 和 ./ 和 ../ 和 ../../
- NB-IoT 的“前世今生”
- CECC2018赛季收官站我国×××手夺得年度总冠军
- zabbix监控iptables防火墙状态之是否有丢弃的包(攻-击)
- Linux系统下的权限详解-1
- hadoop-2.6.5安装
- 超频,如何超频CPU和显卡?
- angularjs 模块化
- javascript本地,宿主,内置对象