Skicka e-postmeddelanden (och bilagor) med Delphi & Indy

Nedan följer instruktioner för att skapa en "e-postavsändare" som innehåller ett alternativ för att skicka e-postmeddelanden och bilagor direkt från en Delphi-applikation. Innan vi börjar, överväga alternativet ...

Anta att du har en applikation som fungerar på vissa databasdata, bland andra uppgifter. Användare måste exportera data från din applikation och skicka informationen via ett e-postmeddelande (som en felrapport). Utan den metod som anges nedan måste du exportera data till en extern fil och sedan använda en e-postklient för att skicka den.

Skickar e-post från Delphi

Det finns många sätt du kan skicka ett e-postmeddelande direkt från Delphi, men det enklaste sättet är att använda ShellExecute API. Det här skickar e-postmeddelandet med standard-e-postklienten installerad på datorn. Även om denna strategi är acceptabel, kan du inte skicka bilagor på detta sätt. 

En annan teknik använder Microsoft Outlook och OLE för att skicka e-posten, den här gången med bilaga stöd, men MS Outlook krävs sedan att användas.

Ännu ett alternativ är att använda Delphis inbyggda stöd för Windows Simple Mail API. Detta fungerar endast om användaren har ett MAPI-kompatibelt e-postprogram installerat.

Den teknik vi diskuterar här använder Indy (Internet Direct) -komponenter - en fantastisk internetkomponent-svit bestående av populära internetprotokoll skrivna i Delphi och baserade på blockeringsuttag.

TIdSMTP (Indy) -metoden

Att skicka (eller hämta) e-postmeddelanden med Indy-komponenter (som skickas med Delphi 6+) är lika enkelt som att släppa en komponent eller två på ett formulär, ställa in vissa egenskaper och "klicka på en knapp."

För att skicka ett e-postmeddelande med bilagor från Delphi med Indy, behöver vi två komponenter. Först, TIdSMTOP används för att ansluta och kommunicera (skicka e-post) med en SMTP-server. För det andra, TIdMessage hanterar lagring och kodning av meddelanden.

När meddelandet är konstruerat (när TIdMessage är "fylld" med data), e-postmeddelandet levereras till en SMTP-server med hjälp av TIdSMTP.

E-postavsändarens källkod

Jag har skapat ett enkelt mail-avsändarprojekt som jag förklarar nedan. Du kan ladda ner hela källkoden här.

Notera: Länken är en direkt nedladdning till ZIP-filen för projektet. Du borde kunna öppna den utan problem, men om du inte kan använda 7-Zip för att öppna arkivet så att du kan hämta ut projektfilerna (som lagras i en mapp som heter Skicka brev).

För att skicka ett e-postmeddelande med hjälp av TIdSMTP komponent, måste du åtminstone ange SMTP-postservrar (värd). Meddelandet i sig behöver de vanliga e-postdelarna som fylls i, som Från, Till, Ämne, etc.

Här är koden som hanterar skicka ett e-postmeddelande med en bilaga:

 procedur TMailerForm.btnSendMailClick (avsändare: TObject); Börja   StatusMemo.Clear;   // inställning SMTP   SMTP.Host: = ledHost.Text; SMTP.Port: = 25;   // inställning av e-postmeddelande   MailMessage.From.Address: = ledFrom.Text; MailMessage.Recipients.EMailAddresses: = ledTo.Text + ',' + ledCC.Text; MailMessage.Subject: = ledSubject.Text; MailMessage.Body.Text: = Body.Text;   om FileExists (ledAttachment.Text) sedan TIdAttachment.Create (MailMessage.MessageParts, ledAttachment.Text);   //skicka brev   Prova     Prova       SMTP.Connect (1000); SMTP.Send (MailMessage);     bortsett från  E: Undantag gör StatusMemo.Lines.Insert (0, 'ERROR:' + E.Message);     slutet;   till sist     om SMTP.Connected sedan SMTP.Disconnect;   slutet; slutet; (* btnSendMail Click *) 

Notera: Inuti källkoden hittar du två extra procedurer som används för att göra värdena på Värd, Från, och Till redigera rutor ihållande, med en INI-fil för lagring.