Odesílání e-mailů s přílohami pomocí Delphi & Indy

Níže jsou uvedeny pokyny pro vytvoření „odesílatele e-mailu“, který zahrnuje možnost odesílání e-mailových zpráv a příloh přímo z aplikace Delphi. Než začneme, zvažte alternativu ...

Předpokládejme, že máte aplikaci, která pracuje mimo jiné s některými databázovými daty. Uživatelé potřebují exportovat data z vaší aplikace a poslat data e-mailem (jako je chybová zpráva). Bez přístupu popsaného níže musíte data exportovat do externího souboru a poté je odeslat pomocí e-mailového klienta.

Odesílání e-mailů od Delphi

Existuje mnoho způsobů, jak můžete poslat e-mail přímo z Delphi, ale nejjednodušší způsob je použít ShellExecute API. To odešle e-mail pomocí výchozího e-mailového klienta nainstalovaného v počítači. I když je tento přístup přijatelný, nemůžete tímto způsobem odesílat přílohy.

Další technika používá k odeslání e-mailu Microsoft Outlook a OLE s podpora přílohy, ale je nutné použít MS Outlook.

Další možností je použití integrované podpory Delphi pro rozhraní API Windows Simple Mail. Funguje to pouze v případě, že má uživatel nainstalován e-mailový program kompatibilní s MAPI.

instagram viewer

Technika, kterou zde diskutujeme, používá Indy Komponenty (Internet Direct) - skvělá sada internetových komponent složená z populárních internetových protokolů napsaných v Delphi a založených na blokovacích soketech.

Metoda TIdSMTP (Indy)

Posílání (nebo načítání) e-mailových zpráv s komponentami Indy (které se dodávají s Delphi 6+) je stejně snadné jako přetažení komponenty nebo dvou do formuláře, nastavení některých vlastností a „kliknutí na tlačítko“.

K odeslání e-mailu s přílohami od Delphi pomocí Indy potřebujeme dvě součásti. Za prvé, TIdSMTOP slouží k připojení a komunikaci (odesílání pošty) se serverem SMTP. Za druhé, TIdMessage zpracovává ukládání a kódování zpráv.

Když je zpráva vytvořena (když TIdMessage je "vyplněn" daty), e-mail je doručen na SMTP server pomocí TIdSMTP.

Zdrojový kód odesílatele e-mailu

Vytvořil jsem jednoduchý projekt odesílatele pošty, který vysvětlím níže. Celý zdrojový kód si můžete stáhnout zde.

Poznámka: Tento odkaz je přímým stažením do souboru ZIP projektu. Měli byste být schopni jej otevřít bez problémů, ale pokud nemůžete, použijte 7-Zip otevřete archiv, abyste mohli extrahovat soubory projektu (které jsou uloženy ve složce nazvané Poslat mail).

Jak můžete vidět z obrazovky v době návrhu, odeslat e-mail pomocí TIdSMTP komponenta, musíte alespoň určit poštovní server SMTP (hostitele). Samotná zpráva potřebuje vyplněné pravidelné e-mailové části, například Z, Na, Předmět, atd.

Zde je kód, který zpracovává odesílání jednoho e-mailu s přílohou:

postup TMailerForm.btnSendMailClick (odesílatel: TObject); začít StatusMemo. Průhledná; // nastavení SMTP SMTP.Host: = ledHost. Text; SMTP.Port: = 25; // nastavení e-mailové zprávy MailMessage. Z. Adresa: = ledOd. Text; MailMessage. Příjemci. EMailAddresses: = ledTo. Text + ',' + ledCC.Text; MailMessage. Předmět: = ledSubject. Text; MailMessage. Tělo. Text: = Body. Text; -li FileExists (ledAttachment). Text) pak TIdAtachtachment. Vytvořit (MailMessage. MessageParts, ledAttachment. Text); //poslat mailSnaž seSnaž se SMTP.Connect (1000); SMTP.Send (MailMessage); až nana E: Výjimka ano. StatusMemo. Čáry. Vložit (0, 'CHYBA:' + E. Zprávy); konec; Konečně-li SMTP.Připojeno pak SMTP.Disconnect; konec; konec; (* btnSendMail Click *)

Poznámka: Uvnitř zdrojového kódu najdete další dva postupy, které se používají k tvorbě hodnot Hostitel, Z, a Na editační pole přetrvávají, pro uložení se používá soubor INI.