vložil [Z]
10. ledna 2011 21:39
V jednom minulém článku popsal Radek jak odeslat e-mail za pomocí Synapse.
Já dávám přednost Indy a proto zde připojuji
jednoduchý návod jak Indy využít ke stejnému účelu.
Komponenty pro internetovou komunikaci Indy (zkratka Internet direct) jsou
výchozí součástí Delphi už docela dlouho. Tento kód bude s minimálními
úpravami funkční ve všech verzích Indy 10, o Indy 9 si nejsem úplně jistý.
Pro jistotu doporučuji používat nejnovější verzi Indy 10
(na stránkách indy.fulgan.com/ZIP/ si stáhněte balík Indy10_xxxx.zip, a případně
návod instalace Indy
a pozor! Je nutné odstranit všechny staré soubory v adresáři nainstalovaných Delphi.
Indy podporují také SSL. Ve starších verzí bylo zapotřebí používat upravené
knihovny OpenSSL. V Indy 10 lze používat standardní sestavení (dostupné na http://indy.fulgan.com/SSL/).
Tyto knihovny je pak nutné nahrát nejlépe do složky s programem a přidat požadované
náležitosti do kódu.
Zde je výsledný kód, který umožní přes SMTP odeslat HTML e-mail s alternativní částí
s prostým textem.
uses
// SMTP
IdSMTP, IdMessage, IdMessageBuilder,
// pro SSL
IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
IdSSL, IdSSLOpenSSL, IdExplicitTLSClientServerBase;
…….
var
smtp: TIdSMTP;
mess: TIdMessage;
begin
smtp:=TIdSMTP.Create(nil);
mess:=TIdMessage.Create(nil);
try
// vycistit
mess.Clear;
// FROM
mess.From.Address := 'odesilatel@ja.cz';
mess.From.Name := 'ode me';
// TO
with mess.Recipients.Add do begin
Address := 'prijemce@on.cz';
Name := 'prijemce';
end;
// ReplyTo
with mess.ReplyTo.Add do begin
Address := 'poslat@jinam.cz';
Name := '…';
end;
// Subject
mess.Subject := 'nazev';
// pokud chceme poslat jen text
//mess.Body.Text := 'text';
// vytvoreni HTML zpravy, lze vyuzit i jiny TIdMessageBuilder
with TIdMessageBuilderHtml.Create do
try
// text
PlainTextCharSet:='utf-8';
PlainText.Text:='normalni text +ěščřžýáíé';
// html
HtmlCharSet:='utf-8';
Html.Text:='<html><body><b>HTML text +ěščřžýáíé</b></body></html>';
//priloha
//Attachments.Add('c:\neco.dat');
// predani
FillMessage(mess);
finally
Free;
end;
mess.Encoding:=meMIME;
smtp.MailAgent := 'agent';
smtp.Host := 'smtp.server.cz';
smtp.Port := 25;
smtp.Username := '';
smtp.Password := '';
// SSL - je potreba nastavit IOHandler na TIdSSLIOHandlerSocketOpenSSL
//smtp.AuthType:=satDefault;
//smtp.UseTLS:=utNoTLSSupport;
// připojeni
smtp.Connect;
// odeslani
smtp.Send(mess);
//odpojeni
smtp.Disconnect;
finally
mess.Free;
smtp.Free;
end;
end;