[轉(zhuǎn)載來(lái)于ChenChuan 學(xué)習(xí)用]
從此流程可以看出,客戶向smtp服務(wù)器發(fā)出郵件后,由smtp服務(wù)器負(fù)責(zé)向收件人發(fā)出最終信件,這個(gè)過(guò)程由服務(wù)器完成,客戶無(wú)需操心??蛻羲P(guān)心的只是怎樣將郵件發(fā)送到smtp服務(wù)器上去。POP3更簡(jiǎn)單了,只需要正確登錄到POP3服務(wù)器上,再下載需要的郵件即可。
用Indy創(chuàng)建收發(fā)電子郵件的例子:
1、創(chuàng)建工程,在窗體中加入IdSMTP1、IdMessage1和IdPOP31(Indy控件標(biāo)簽組)控件各一個(gè)。
2、設(shè)置 IdSMTP1.Host := ‘SMTP.163.com‘;(我用的是163檢試,具體也可選擇其它服務(wù)器) IdSMTP1.Username := ‘caoyan528‘;(此處即表示郵箱的賬號(hào)名,例如郵箱為:aaaaaa@163.com,則Username即為aaaaaa) IdSMTP1.Password := ‘XXXXXXXX‘;(此處即為郵箱的密碼,如aaaaaa@163.com郵箱密碼為123456,則Password即為123456)。
3、設(shè)置IdMessage1.From.Address := ‘caoyan_528@163.com‘;(注意,此處的郵箱地址應(yīng)在smtp.163.com中存在且就為以上設(shè)置的Username),IdMessage1.Recipients.EMailAddresses := ‘caoyan528@gmail.com’(此處表示收件人地址,只要是任何一個(gè)存在的郵箱地址即可) IdMessage1.Subject:= ‘第一個(gè)郵件客戶端‘;(主題)具體源代碼如下:
procedure TForm1.Button4Click(Sender: TObject);
var
filename : String;
tmpEMailItem : TIdEMailAddressItem;
// tmpEmailAdd : TIdEmailAddressList;
begin
try
IdSMTP1.Host := ‘SMTP.163.com‘;
IdSMTP1.AuthenticationType := atLogin; //保證登錄模式為L(zhǎng)ogin
IdSMTP1.Username := ‘caoyan_528‘;
IdSMTP1.Password := ‘XXXXXX‘;
filename := ‘E:\郵件發(fā)送程序\2003-12-22_253_04.jpg‘; //需要添加的附件文件
TIdAttachment.Create(IdMessage1.MessageParts,filename); //添加附件
IdMessage1.From.Address := ‘caoyan_528@163.com‘;
IdMessage1.Recipients.EMailAddresses:=‘caoyan528@gmail.com‘;
tmpEMailItem := IdMessage1.Recipients.Add; //添加一個(gè)地址列表
tmpEMailItem.Text := ‘caoyan528@gmail.com‘; //寫一個(gè)收件人
idMessage1.BccList.Add.Text := ‘caoyan_528@yahoo.com.cn‘; //書寫多個(gè)目標(biāo)地址,實(shí)現(xiàn)群發(fā)
idMessage1.BccList.Add.Text := ‘caoyan_528@163.com‘; //書寫多個(gè)目標(biāo)地址,實(shí)現(xiàn)群發(fā)
IdMessage1.Subject:= ‘第一個(gè)郵件客戶端‘;
IdMessage1.Body.Text := Memo1.Text; //此處為郵件正文
IdMessage1.CharSet := ‘gb2312‘; //保證附件正文漢字的正常顯示
IdMessage1.Body.Assign(Memo1.Lines);
if IdSMTP1.AuthSchemesSupported.IndexOf(‘LOGIN‘)>-1 then
begin
IdSMTP1.AuthenticationType := atLogin; //連接前要保存為L(zhǎng)ogin 上面己設(shè),此處不必要
IdSMTP1.Authenticate;
end;
IdSMTP1.Connect(); //連接SMTP服務(wù)器
IdSMTP1.Authenticate;
IdSMTP1.Send(IdMessage1); //向服務(wù)器發(fā)送郵箱
finally
IdSMTP1.Disconnect; //斷開與服務(wù)器的連接
end;
end;
自此,memo1中所寫的內(nèi)容被當(dāng)作郵件發(fā)送了出去。而filename所指的附件也一同被發(fā)送到了服務(wù)器。
4、接收郵件
收以上的流程圖不難看出,接收郵件完全是POP3服務(wù)器來(lái)完成的,客戶只需連接到POP3服務(wù)器即可下載郵件。具體做法如下:
設(shè)置IdPOP31.Host := POP.163.com IdPOP31.Username := ‘caoyan_528‘; IdPOP31.Password:= ‘XXXXX‘; (此處的設(shè)置與SMTP的設(shè)置相同) 源代碼如下:
procedure TForm1.Button5Click(Sender: TObject);
var
mailcount : integer;
i : integer;
tmp : string;
begin
IdPOP31.Connect(); //連接到POP3服務(wù)器
mailcount := IdPOP31.CheckMessages; //得到郵箱郵件的各數(shù)
for i:=1 to mailcount do //遍歷每一封郵件
begin
IdMessage1.Clear;
IdPOP31.retrieveHeader(i,IdMessage1); //得到郵件的頭信息
tmp := IdMessage1.Subject; //得到郵件的標(biāo)題
Memo1.Lines.Add(tmp);
IdPOP31.Retrieve(i,IdMessage1); //接收到郵件所有內(nèi)容
tmp := IdMessage1.Body.Text; //郵件正文
memo1.Lines.Add(tmp);
end;
IdPOP31.Disconnect; //斷開連接
end;




