本文实例讲述了Delphi7中群发Email邮件的方法。分享给大家供大家参考。具体分析如下:
这段时间需要对所有参加考试的考生将考生信息及考试信息通过电子邮件群发,经过多次调试,算是成功了,发来给大家参考一下:
总的思路是:
1、安装局域网版的邮件服务器,并通过设置DNS使得给服务器能给网外用户发送电邮,这方面的软件比较多,例如WinWebMail就不错,可以从官网下载;
2、需要使用到的控件:Indy10.0.15,可以通过百度搜索下载;
3、设置需要发送的电子邮箱服务器及账号信息
var
selectStr:string;
thisresult:integer;
begin
thisresult := 0;
//设置账户
IdSMTP1.AuthType := atNone; //或者是atSASL;
IdSMTP1.Host := hostString;
IdSMTP1.Username := userNameString;
IdSMTP1.Password := passWordString;
try
IdSMTP1.connect;
thisresult := 1;
if not IdSMTP1.Authenticate then
begin
showmessage('发送邮箱账号验证失败!请检查SMTP账户设置!');
thisresult := 0;
end
except
showmessage('SMTP服务器连接失败!请检查SMTP账户设置及网络是否正常!');
thisresult := 0;
end
end;
result := thisresult;
end;</div>
4、将Email发送一个信息作为独立函数,发送时需要进行延时控制
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
begin
MsgKsbkxx.From.Name := emailusername; //邮件发送人姓名
MsgKsbkxx.From.Address := formAddress; //邮件发送人地址
MsgKsbkxx.ReceiptRecipient.Address := receiptRecipientAddress;
//回复地址,可以与邮件发送人地址不同
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd; //发送地址?
MsgKsbkxx.Sender.Address := formAddress; //sendtoAdd; //邮件发送至......地址
MsgKsbkxx.Subject := emailSubject; //主题
MsgKsbkxx.Body.Assign(emailMemo.Lines); //邮件内容
IdSMTP1.Send(MsgKsbkxx); //发送邮件指令
end;</div>
5、简单判断电子邮件地址的合法性
procedure SeparateTerms2(s:string;Separator:string;var rs:TStringList);
var
AStr: string;
idx: Integer;
ASubStr: string;
begin
AStr := Trim(s);
while Pos(Separator, AStr) > 0 do
begin
idx := Pos(Separator, AStr);
ASubStr := Copy(AStr, 1, idx - 1);
rs.Add(ASubStr);
AStr := Copy(AStr, idx + 1, Length(AStr));
end;
if AStr+'a' <> 'a' then rs.Add(AStr); //如果存在剩余的字符串,则将其存入字符串列表中
end;
//判断某个字符串是否符合电邮邮件地址标准
//正确:返回ok,错误返回error
function emailAddressYesOrNo (emailAddress:String):string;
var
getStrings:TStringList;
getYesOrNo:string;
begin
getYesOrNo := 'error';
getStrings := TStringList.Create;
SeparateTerms2(emailAddress,'@',getStrings);
if getStrings.Count=2 then
begin
getStrings.Clear;
SeparateTerms2(emailAddress,'.',getStrings);
if getStrings.Count>1 then getYesOrNo := 'ok';
end;
getStrings.Free;
result := getYesOrNo;
end;</div>
6、批量发送电子邮件
var
AccordAmount,i,j,tag:integer;
emailusername,formAddress,sendtoAdd,emailSubject,receiptRecipientAddress,selectStr:string;
begin
//判断数据表里面是否有需要发送电子邮件的数据,如果有则发送
if Bmb.RecordCount >0 then
AccordAmount := Bmb.RecordCount
else
exit;
//
//获取账户信息,一般存放在数据表或INI文件中
emailusername := userNameString; //发送邮件人
formAddress := fromAddressString; //发送邮件地址
receiptRecipientAddress := receiptRecipientAddressString; //回复邮件地址
emailSubject := emailSubjectString; //邮件主题
//
tag := 1; //标志位:发送出错则停止
i:=1; //发送邮件的总数
j:=0; //让进度条逐步递进的记录处理条数
list1.Clear; //显示已经成功发送电子邮件的学员信息
//判断是否能与设置的邮箱连接,如果返回值为1,则获取邮件内容及相关设置并发送
if setEmailInfo = 1 then
begin
Pb.BlockSize := 1;
Pb.Max := AccordAmount ;
Formsjtj.Refresh;
Bmb.First;
try
while (not tBmb.Eof) do
begin
//判断邮件地址是否为空且是否符合电邮规范,如都满足条件则给该地址发送电邮
if Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' then
begin
//获取发送邮件的内容
emailMemo.Clear;
..........................
//设置邮件信