• 用Indy创建收发电子邮件的例子


    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.EMailAddre

    sses := ‘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; 

  • 相关阅读:
    15天学会jQuery
    android面试题-简答题(一)
    android面试题-选择填空(一)
    【Android进阶】Android面试题目整理与讲解
    Android 面试题(有详细答案)
    Android开发人员必备的10 个开发工具
    Android环境搭建
    到底如何区分什么是架构、框架、模式和平台 ?
    c#执行Dos命令
    C#打开Word
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940968.html
Copyright © 2020-2023  润新知