2024年3月9日发(作者:)

实例四 邮件群发

【程序说明】

邮件群发是一种很有用软件,不管是用在广告还是个人发送通知,这里我们就教大家如何做

一个简单的邮件群发软件。

程序运行效果如图所示。

图8.4.1

【编程思路】

在D7中,邮件发送我们仍然利用Indy系列组件,大家可以看到在网络应用程序方面,Indy

系列组件应用非常广,难怪DELPHI7用它代替了以前的FastNet单元。发送邮件使用SMTP协

议,使用TidMessage组件配合TIdSMTP组件来完成此功能,而群发不过是增加一个邮件地址列

表然后循环一遍即可。

【编程步骤】

1.启动Delphi7,建立一个标准的Application。

2.添加控件:

普通的控件在前面我们已经很熟悉了,这个例子我们用到了新的组建,TidMessage组件和

TIdSMTP组件用来完成发送邮件,TpopupMenu弹出菜单组件、TopenDialog和TsaveDialog组件

用来配合地址列表的操作。

图8.4.2

组件名称

TPopupMenu

TLabeledEdit

TOpenDialog

TSaveDialog

对象名称

PopupMenu1

le_pass

openDialog1

saveDialog1

组件属性

Items

PasswordChar

Filter

Filter

图8.4.3

#

文本文件(*.txt)|*.txt|所有文件

文本文件(*.txt)|*.txt|所有文件

属性值

图8.4.3

2.编写代码:

(1) 我们从简单的开始,首先看看如何导入导出地址列表:

procedure 1Click(Sender: TObject);

begin

if not e then Exit; //如果没有选择文件则退出

omFile(me);

end;

procedure 2Click(Sender: TObject);

begin

if = 0 then exit;

if e then //选择了保存文件

File(me);

end;

地址列表文件其实就是一个文本文件,每一行写入一个Email地址,通过TlistBox组件的

LoadFromFile和SaveToFile即可完成导入导出操作。

(2) 然后看看菜单代码:

procedure TForm1.N1Click(Sender: TObject);

var

s: string;

begin

s := InputBox('输入对话框', '请输入邮件地址:', '@');

if (Length(s) > 5) and (Pos('@', s) < Pos('.', s)) then

(s);

end;

添加号码菜单执行以上代码。

procedure TForm1.N2Click(Sender: TObject);

begin

Selected;

end;

删除所选菜单执行以上代码。

procedure TForm1.N3Click(Sender: TObject);

begin

;

end;

清空列表菜单执行以上代码。

(3) 接下来开始重点邮件发送的代码了:

procedure 3Click(Sender: TObject);

var

i: integer;

begin

if = 0 then

begin

showmessage('发送列表为空,群发失败!');

exit;

end;

if me_ = '' then //检测邮件是否有内容

begin

showmessage('输入邮件内容!');

exit;

end;

d := False;

if cb_d then //服务器验证

begin

ticationType := atLogin; //设置认证模式

me := le_; //用户名

rd := le_; //密码

end else

begin

ticationType := atNone;

end;

:= le_; //主机地址

:= StrToIntDef(le_, 25); //如果转换错误默认25

t; //连接

try

Tag := 1; //设置中断标志

for i := 0 to - 1 do

begin //循环发送

if Tag = 0 then exit; //如果中断则退出群发

SendEmail(s[i]); //这个函数我们在后面介绍

(IdMessage1); //发送

dex := i;

Text := Format('正在发送... (%d/%d) %s', [i, - 1,

s[i]]);

sMessages; //循环期间处理进程消息

end;

finally

Tag := 0;

nect; //断开连接

d := True;

end;

Text := '发送完成...';

end;

为了可以随时中断发送,我们需要设置一个全局标志,这里我们直接利用了Tform的Tag

属性来完成,这种方法可以省掉一个全局变量的申明和初始化它的值,因而中断按钮的代码就非

常简单了,一句Tag := 0;即可。

其中我们用到了SendEmail()函数代码如下:

function ail(aAddr: string): boolean;

begin

(me_); //内容

:= le_;

ddresses := le_; //回复地址

ddresses := aAddr; //发送地址

t := le_; //标题

end;

这个函数就是我们用来设置发送的邮件信息的,循环中每封邮件的发送地址都不一样,因而

封装此函数方便使用。

(4) 保存参数的代码:

procedure 5Click(Sender: TObject);

begin //保存配置

with (ExtractFilePath(ParamStr(0)) + '') do

begin

WriteString('comm', 'smtp', le_);

WriteString('comm', 'port', le_);

WriteString('comm', 'user', le_);

WriteString('comm', 'pass', le_);

WriteString('comm', 'email', le_);

WriteBool('comm', 'pass', cb_d);

end;

end;

Ini文件的使用我们在前面已经介绍过,这里就不多说了,同理,在窗体显示的时候读出这

些配置即可。

3.全部代码写完收工,F9运行一下看看效果。

【程序小结】

本程序主要的功能由IdMessage和IdSMTP组件完成,如果想做一个OutLook的软件,再学

习一下TidPop3、T IdIMAP的组件使用,需要用到什么协议,就用相应的组件来完成。