Delphi7中群發(fā)Email郵件的方法
本文實(shí)例講述了Delphi7中群發(fā)Email郵件的方法。分享給大家供大家參考。具體分析如下:
這段時(shí)間需要對(duì)所有參加考試的考生將考生信息及考試信息通過電子郵件群發(fā),經(jīng)過多次調(diào)試,算是成功了,發(fā)來給大家參考一下:
總的思路是:
1、安裝局域網(wǎng)版的郵件服務(wù)器,并通過設(shè)置DNS使得給服務(wù)器能給網(wǎng)外用戶發(fā)送電郵,這方面的軟件比較多,例如WinWebMail就不錯(cuò),可以從官網(wǎng)下載;
 
2、需要使用到的控件:Indy10.0.15,可以通過百度搜索下載;
 
3、設(shè)置需要發(fā)送的電子郵箱服務(wù)器及賬號(hào)信息
var
selectStr:string;
thisresult:integer;
begin
thisresult := 0;
//設(shè)置賬戶
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('發(fā)送郵箱賬號(hào)驗(yàn)證失?。≌?qǐng)檢查SMTP賬戶設(shè)置!');
thisresult := 0;
end
except
showmessage('SMTP服務(wù)器連接失敗!請(qǐng)檢查SMTP賬戶設(shè)置及網(wǎng)絡(luò)是否正常!');
thisresult := 0;
end
end;
result := thisresult;
end;
4、將Email發(fā)送一個(gè)信息作為獨(dú)立函數(shù),發(fā)送時(shí)需要進(jìn)行延時(shí)控制
formAddress:string;receiptRecipientAddress:string;sendtoAdd:string;emailSubject:string);
begin
MsgKsbkxx.From.Name := emailusername; //郵件發(fā)送人姓名
MsgKsbkxx.From.Address := formAddress; //郵件發(fā)送人地址
MsgKsbkxx.ReceiptRecipient.Address := receiptRecipientAddress;
//回復(fù)地址,可以與郵件發(fā)送人地址不同
MsgKsbkxx.Recipients.EMailAddresses := sendtoAdd; //發(fā)送地址?
MsgKsbkxx.Sender.Address := formAddress; //sendtoAdd; //郵件發(fā)送至......地址
MsgKsbkxx.Subject := emailSubject; //主題
MsgKsbkxx.Body.Assign(emailMemo.Lines); //郵件內(nèi)容
IdSMTP1.Send(MsgKsbkxx); //發(fā)送郵件指令
end;
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;
//判斷某個(gè)字符串是否符合電郵郵件地址標(biāo)準(zhǔn)
//正確:返回ok,錯(cuò)誤返回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;
6、批量發(fā)送電子郵件
var
AccordAmount,i,j,tag:integer;
emailusername,formAddress,sendtoAdd,emailSubject,receiptRecipientAddress,selectStr:string;
begin
//判斷數(shù)據(jù)表里面是否有需要發(fā)送電子郵件的數(shù)據(jù),如果有則發(fā)送
if Bmb.RecordCount >0 then
AccordAmount := Bmb.RecordCount
else
exit;
//
//獲取賬戶信息,一般存放在數(shù)據(jù)表或INI文件中
emailusername := userNameString; //發(fā)送郵件人
formAddress := fromAddressString; //發(fā)送郵件地址
receiptRecipientAddress := receiptRecipientAddressString; //回復(fù)郵件地址
emailSubject := emailSubjectString; //郵件主題
//
tag := 1; //標(biāo)志位:發(fā)送出錯(cuò)則停止
i:=1; //發(fā)送郵件的總數(shù)
j:=0; //讓進(jìn)度條逐步遞進(jìn)的記錄處理?xiàng)l數(shù)
list1.Clear; //顯示已經(jīng)成功發(fā)送電子郵件的學(xué)員信息
//判斷是否能與設(shè)置的郵箱連接,如果返回值為1,則獲取郵件內(nèi)容及相關(guān)設(shè)置并發(fā)送
if setEmailInfo = 1 then
begin
Pb.BlockSize := 1;
Pb.Max := AccordAmount ;
Formsjtj.Refresh;
Bmb.First;
try
while (not tBmb.Eof) do
begin
//判斷郵件地址是否為空且是否符合電郵規(guī)范,如都滿足條件則給該地址發(fā)送電郵
if Bmb.FieldByName('s_emailAddress').AsString+'a' <> 'a' then
begin
//獲取發(fā)送郵件的內(nèi)容
emailMemo.Clear;
..........................
//設(shè)置郵件信息,如發(fā)送郵件錯(cuò)誤,則直接退出
if tag=0 then exit;
//發(fā)送郵件
sendtoAdd := trim(Bmb.FieldByName('s_emailAddress').AsString); //需要發(fā)送至...郵箱
if emailAddressYesOrNo(sendtoAdd)= 'ok' then //檢查電子郵件格式是否正確
begin
sendEmailOnce(emailusername,formAddress,receiptRecipientAddress,sendtoAdd,emailSubject); //發(fā)送郵件
i := i+1; //計(jì)數(shù)器加1
list1.Items.Add(......); //將已經(jīng)成功發(fā)送電郵的考生信息放在列表中
end;
//
end;
//每發(fā)送50封郵件停滯2s鐘
if (i mod 50) = 0 then sleep(2000);
dm_sjtj.ListBmb.next;
Application.ProcessMessages ; //循環(huán)中處理進(jìn)程信息
//刷新進(jìn)度指示
j := j+1;
PB.Progress:=j;
PB.StepIt ;
PB.Refresh;
end;
finally
tag := 0;
IdSMTP1.Disconnect;
end;
end;
showmessage('共發(fā)送 '+intToStr(i-1)+' 封郵件。');
end;
7、需要注意的問題
① 濫發(fā)電郵是國家所不允許的
② 由于群發(fā)電郵是絕大多數(shù)電郵提供商都控制,往往2封電郵之間必須要有一段時(shí)間的延遲,建議自行架設(shè)郵件服務(wù)器
③ 由于Indy控件只有atNone和atSASL兩種模式,架設(shè)好郵件服務(wù)器后,需要設(shè)置不需要驗(yàn)證的IP地址及賬號(hào);
④ 由于內(nèi)部郵件地址無法獲得電郵回復(fù),因此往往回復(fù)地址與發(fā)信地址設(shè)置為不同。現(xiàn)在出現(xiàn)的一個(gè)問題就是通過瀏覽器打開郵件無法回復(fù),但是通過Foxmail接收郵件后可以獲得回復(fù)。這點(diǎn)需要注意。
希望本文所述對(duì)大家的Delphi程序設(shè)計(jì)有所幫助。
上一篇:Delphi XE5 為Android應(yīng)用制作簽名的方法(圖文)
欄 目:Delphi
下一篇:ListView 百分比進(jìn)度條(delphi版)
本文標(biāo)題:Delphi7中群發(fā)Email郵件的方法
本文地址:http://www.jygsgssxh.com/a1/Delphi/8612.html
您可能感興趣的文章
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫中存取圖像的圖文演示無錯(cuò)
 - 01-10Delphi中判斷文件是否為文本文件的函數(shù)
 - 01-10delphi中一個(gè)值得大家來考慮的DLL問題
 - 01-10初探Delphi中的插件編程
 - 01-10DELPHI7.0 獲取硬盤、CPU、網(wǎng)卡序列號(hào)的代碼
 - 01-10Delphi 生成excel中餅圖的實(shí)例代碼
 - 01-10delphi中exit,abort,break,continue的區(qū)別介紹
 - 01-10Delphi中設(shè)置條件斷點(diǎn)的方法講解
 - 01-10Delphi之Pascal語言中的關(guān)鍵字及保留字匯總
 - 01-10Delphi中對(duì)時(shí)間操作方法匯總
 


閱讀排行
本欄相關(guān)
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫中存取圖像的圖
 - 01-10delphi建立、讀取、存貯INI文件的方法
 - 01-10delphi 正弦曲線圖
 - 01-10Delphi Command模式
 - 01-10delphi建立、讀取、存貯INI文件的方法
 - 01-10插件管理框架 for Delphi(二)
 - 01-10插件管理框架 for Delphi(一)
 - 01-10Delphi中判斷文件是否為文本文件的函
 - 01-10delphi中一個(gè)值得大家來考慮的DLL問題
 - 01-10初探Delphi中的插件編程
 
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 04-02jquery與jsp,用jquery
 - 01-10C#中split用法實(shí)例總結(jié)
 - 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
 - 01-10delphi制作wav文件的方法
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 


