做个邮件客户端过把瘾

IT商界

  所用工具:Delphi 6/7

  用途:从Delphi5开始,Borland就为我们提供了发送电子邮件的控件──NMSMTP。使用这个控件可以很轻松地实现发送电子邮件的功能。但是,由于垃圾邮件及群发软件的泛滥,大多数邮箱提供商都给SMTP加上了身份验证功能。因此,使用Delphi5中的NMSMTP控件将不能满足现在的需求,由于NMSMTP无法设置验证密码,在碰到需要验证身份的SMTP服务器时,将无法发送邮件。好在,从Delphi6开始,Borland就为我们提供了一个新的发送邮件的控件──IdSMTP,使用这个控件就可以实现身份验证的功能了。IdSMTP与NMSMTP在使用上有所区别。下面主要讲解如何使用IdSMTP发送邮件(本文以Delphi7为例)。

  第一步:首先,在Delphi7中新建一个工程。添加如下控件(这些控件在Standard面板中可以找到),然后调整一下控件的位置,大概界面如图1。添加的控件属性如下几个表所示:

  添加8个Label控件(图2);添加7个Edit控件(图3),属性设置参考表1;添加一个Memo控件(图4),属性设置参考表2;添加两个Button控件(图5);添加一个OpenDialog控件(在Dialogs面板中,如图6),用于浏览附件。

  第二步:界面完成后,接着就添加两个发送邮件时需要的控件:选择Indy Clients面板中的IdSMTP(图7)及Indy Misc面板中的IdMessage(图8),分别放置在窗体上。

  提示:在编写代码之前,先介绍一下IdSMTP及IdMessage它们各自所起的作用。

  IdSMTP主要用于发送电子邮件。SMTP服务器地址、账户及账户密码都是在IdSMTP控件中进行设置;IdMessage主要设置发件人地址、发件人姓名、接收人地址、邮件的主题、邮件的正文等信息。因此,在使用IdSMTP发送邮件时,IdMessage是必不可少的。

  好,下面开始编写代码:

  第三步:先编写“浏览”附件的代码,双击“浏览”按钮,添加下面的代码:

  // 添加附件

  OpenDialog1.FileName := '';

  OpenDialog1.Filter := '所有文件|*.*';

  if OpenDialog1.Execute then

  begin

  edt_File.Text := OpenDialog1.FileName;

  end;

  第四步:接下来编写与发送邮件有关的代码。

  与使用FoxMail时一样,第一次使用时都将进行账户设置,所以我们先设置IdMessage控件。

  提示:通过这代码大家也可从中学会IdMessage控件的使用。

  双击“发送邮件”按钮,添加下面的代码:

  // 发件人地址

  IdMessage1.From.Address := edt_From.Text;

  // 发件人姓名

  IdMessage1.From.Name := edt_UserName.Text;

  // 收件人地址

  IdMessage1.Recipients.EMailAddresses := edt_To.Text;

  // 主题

  IdMessage1.Subject := edt_Subject.Text;

  // 填写正文

  IdMessage1.Body.Add(Memo 1.Text);

  第五步:如果你想添加附件,接着上面的代码使用下面这句代码即可实现:

  // 添加附件

  TidAttachment.Create(IdMessage1.MessageParts, edt_File.Text);

  其中,第二个参数即是附件的路径。

  第六步:IdMessage设置完成后,接下来就开始编写发送邮件代码了(接着上面的代码写):

  // SMTP服务器

  IdSMTP1.Host := edt_SMTP.Text;

  // 账号

  IdSMTP1.Username := edt_UserName.Text;

  // 密码

  IdSMTP1.Password := edt_Psw.Text;

  // 登录时验证身份

  IdSMTP1.AuthenticationType := atLogin;

  // 连接服务器

  IdSMTP1.Connect;

  // 发送邮件

  IdSMTP1.Send(IdMessage1);

  提示:好了,代码部分就编写完了。先进行保存,以免发生意外。点击工具栏中的“Save All”按钮。输入单元名称及工程名称即可,需要注意的是,单元名称不能与工程名称相同。

  保存好后,按F9运行程序,点击“发送邮件”按钮就可以发送电子邮件了。

  补充:

  最后再讲讲IdSMTP控件提供的几个事件(表3)。

  如果要在发送完邮件后弹出提示信息,可以在OnWorkEnd事件中编写代码:

  ShowMessage('发送完毕!');

  //连接关闭

  IdSMTP1.Disconnect;