delphi工作筆記利用indy10發送郵件



復制代碼
//郵件發送
type
TEmailState = (esBegin,esSending,esEnd,esFaild);
EMailState = TEmailState;

TSendEmail= class
private
FHost:string;//主機
FUserName:String;//用戶名
FEmail: TStringList;//收件人郵箱列表
FEmailMsg: string; //郵件正文
FSenderEmail: string;//發送人
FSubject: string;//主題
FiPort: Integer;//端口
FPassword: string;//密碼
FszPort: string;//
SMTP:TIdSMTP; //indy10 SMTP控件
EMessage:TIdMessage;//
EAttachment:TIDAttachment;//沒用
FAddons:TStringList;//附件列表(文件路徑)
FEState: EMailState;//郵件狀態
FEmailCount: integer;//發送數據
FSendingCount: integer;//正在發送數量
FisSendedCount: integer;//已發數量
procedure SetEmail(const Value: TStringList);
procedure SetEmailMsg(const Value: string);
procedure SetSenderEmail(const Value: string);
procedure SetSubject(const Value: string);
procedure SetHost(const Value: String);
procedure SetiPort(const Value: Integer);
procedure SetPassword(const Value: string);
procedure SetszPort(const Value: string);
procedure SetUserName(const Value: String);
procedure SetEState(const Value: EMailState);
procedure SetEmailCount(const Value: integer);
procedure SetisSendedCount(const Value: integer);
procedure SetSendingCount(const Value: integer); //郵件帳號列表
protected
function CheckEmail():Boolean;//取消
function Login(AUserName,APassword,AHost:string;APort:Integer=25):Boolean; //登陸是否成功 取消
public
//地址列表,附件列表
constructor Create(UserName,From,PassWord,Host,MasterID:String;EmailAddressList,AddonsPath:TStringList;Port:Integer=25);virtual;
destructor Destroy;override;
procedure FillEMessage; //填充消息
function StartSendEmail():Boolean; //開始發送
function LoadEmailState():string;
//開始
procedure OnStartSendEmail(ASender: TObject; AWorkMode: TWorkMode;
AWorkCountMax: Integer);
//發送中
procedure OnSendingEmail(ASender: TObject; AWorkMode: TWorkMode;
AWorkCount: Integer);
// 發送完畢
procedure OnEndEmail(ASender: TObject; AWorkMode: TWorkMode);
property Email:TStringList read FEmail write SetEmail;
property EmailMsg:string read FEmailMsg write SetEmailMsg;
property SenderEmail:string read FSenderEmail write SetSenderEmail;
property Subject:string read FSubject write SetSubject;//主題
property Host:String read FHost write SetHost;
property UserName:String read FUserName write SetUserName;
Property Password:string read FPassword write SetPassword;
property iPort:Integer read FiPort write SetiPort;
property szPort:string read FszPort write SetszPort;
property EState:EMailState read FEState write SetEState;
property EmailCount:integer read FEmailCount write SetEmailCount;
property SendingCount:integer read FSendingCount write SetSendingCount;
property isSendedCount:integer read FisSendedCount write SetisSendedCount;

復制代碼


復制代碼
//構造函數
constructor TSendEmail.Create(UserName,From,PassWord,Host,MasterID:String;EmailAddressList,AddonsPath:TStringList;Port:Integer=25);
begin
SMTP := TIdSMTP.Create();
SMTP.HeloName :='Send';//indy bug防止被過濾
SMTP.OnWorkBegin := self.OnStartSendEmail;
SMTP.OnWork := self.OnSendingEmail;
SMTP.OnWorkEnd := Self.OnEndEmail;
//SMTP.UseEhlo := False;為True才能通過驗證
//self.MasterID := MasterID;

EMessage := TIdMessage.Create;
FAddons := TStringList.Create;
Femail := TStringList.Create;

self.SenderEmail := From;
self.FHost := Host;
self.FUserName := UserName;
Self.FPassword := Password;
self.FAddons.AddStrings(AddonsPath);
self.FEmail.AddStrings(EmailAddressList);
self.FiPort := Port;
self.FszPort:= IntToStr(Port);
end;

復制代碼


復制代碼
procedure TSendEmail.FillEMessage;
var
I: Integer;
test :string;
begin
inherited;
EMessage.ClearBody;//清空正文
EMessage.CharSet := 'gb2312';//字體集gb2312;
EMessage.Subject := FSubject;//主題
// Emessage.ContentType :='text/html';
EMessage.Body.Text := Self.FEmailMsg;//消息正文
EMessage.From.Address :=FUserName;//發送人
EMessage.From.Name :=self.SenderEmail;
EMessage.Recipients.EMailAddresses:=FEmail[0];//(FEmail);//收件人
//群發 填充bccList可以群發
for I := 1 to FEmail.Count - 1 do
begin
EMessage.BccList.Add.Address := FEmail[i];
end;
//添加附件
//Emessage.ContentType :='multipart/mixed';
for I := 0 to FAddons.Count - 1 do
begin
if FileExists(Faddons[i]) then
TIdAttachmentFile.Create(EMessage.MessageParts,FAddons[i]);
end;
end;

復制代碼


復制代碼
function TSendEmail.StartSendEmail:Boolean;
var
I: Integer;
SendEmail:String;
begin
Result := False;

{ if not CheckEmail then
raise Exception.Create('服務器驗證失敗');
}
//填充信息
FillEMessage;
SMTP.Host := self.Host; //主機
SMTP.Port := self.iPort; //端口
//SASL驗證
SMTP.Username := self.UserName;
SMTP.Password := self.Password;
SMTP.AuthType := atDefault;//驗證

//開始發送郵件
{SMTP.Username := FUserName;
SMTP.Password := FPassword;
SMTP.Host := FHost;
SMTP.Port := FiPort;
}
if SMTP.Connected then
SMTP.Disconnect();
try
SMTP.Connect;
except
raise Exception.Create('連接失敗,請檢查網絡是否連接');
end;
try
try
if SMTP.Authenticate then //驗證
begin
SMTP.Send(EMessage);
Result := True;
end;
except
raise Exception.Create('認證失敗,請檢查用戶名或密碼是否正確');
end;
finally
SMTP.Disconnect();
end;

end;

復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM