C#文件流停止緊縮息爭緊縮的辦法。本站提示廣大學習愛好者:(C#文件流停止緊縮息爭緊縮的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#文件流停止緊縮息爭緊縮的辦法正文
本文實例講述了Delphi7中群發Email郵件的辦法。分享給年夜家供年夜家參考。詳細剖析以下:
這段時光須要對一切加入測驗的考生將考生信息及測驗信息經由過程電子郵件群發,經由屢次調試,算是勝利了,發來給年夜家參考一下:
總的思緒是:
1、裝置局域網版的郵件辦事器,並經由過程設置DNS使得給辦事器能給網外用戶發送電郵,這方面的軟件比擬多,例如WinWebMail就不錯,可以從官網下載;
2、須要應用到的控件:Indy10.0.15,可以經由過程百度搜刮下載;
3、設置須要發送的電子郵箱辦事器及賬號信息
function setEmailInfo:integer; //前往值0:郵箱設置掉敗;1:郵箱設置勝利
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;
4、將Email發送一個信息作為自力函數,發送時須要停止延時掌握
procedure sendEmailOnce(emailusername:string;
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;
5、簡略斷定電子郵件地址的正當性
//依據字符串Separator的表現將字符串s分隔為若干個字符串,存入rs字符串列表中
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;
6、批量發送電子郵件
procedure bEmailKsxxClick;
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;
..........................
//設置郵件信息,如發送郵件毛病,則直接加入
if tag=0 then exit;
//發送郵件
sendtoAdd := trim(Bmb.FieldByName('s_emailAddress').AsString); //須要發送至...郵箱
if emailAddressYesOrNo(sendtoAdd)= 'ok' then //檢討電子郵件格局能否准確
begin
sendEmailOnce(emailusername,formAddress,receiptRecipientAddress,sendtoAdd,emailSubject); //發送郵件
i := i+1; //計數器加1
list1.Items.Add(......); //將曾經勝利發送電郵的考生信息放在列表中
end;
//
end;
//每發送50封郵件停止2s鐘
if (i mod 50) = 0 then sleep(2000);
dm_sjtj.ListBmb.next;
Application.ProcessMessages ; //輪回中處置過程信息
//刷新進度指導
j := j+1;
PB.Progress:=j;
PB.StepIt ;
PB.Refresh;
end;
finally
tag := 0;
IdSMTP1.Disconnect;
end;
end;
showmessage('共發送 '+intToStr(i-1)+' 封郵件。');
end;
7、須要留意的成績
① 濫發電郵是國度所不許可的
② 因為群發電郵是絕年夜多半電郵供給商都掌握,常常2封電郵之間必需要有一段時光的延遲,建議自行架設郵件辦事器
③ 因為Indy控件只要atNone和atSASL兩種形式,架設好郵件辦事器後,須要設置不須要驗證的IP地址及賬號;
④ 因為外部郵件地址沒法取得電郵答復,是以常常答復地址與發信地址設置為分歧。如今湧現的一個成績就是經由過程閱讀器翻開郵件沒法答復,然則經由過程Foxmail吸收郵件後可以取得答復。這點須要留意。
願望本文所述對年夜家的Delphi法式設計有所贊助。