2012-09-10 11:43:23| 分类: delphi xe2 | 标签: |举报 |字号大中小 订阅
用Indy创建收发电子邮件的例子 |
日期:2007年12月1日 作者: 人气: 4151 查看:[大字体 中字体 小字体] |
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; |
评论